如果我像这样定义Ruby函数:
def ldap_get ( base_dn, filter, scope=LDAP::LDAP_SCOPE_SUBTREE, attrs=nil )
我怎么能说它只提供前两个和最后一个参数呢?为什么不像这样的东西
ldap_get( base_dn, filter, , X)
可能,或者如果它是可能的,怎么做?
发布于 2009-05-01 16:24:02
这在ruby中是不可能的。不能将“empty”属性传递给方法。你能得到的最接近的方法是传递nil:
ldap_get(base_dn, filter, nil, X)
但是,这会将作用域设置为nil,而不是LDAP::LDAP_SCOPE_SUBTREE。
你能做的就是在你的方法中设置默认值:
def ldap_get(base_dn, filter, scope = nil, attrs = nil)
scope ||= LDAP::LDAP_SCOPE_SUBTREE
... do something ...
end
现在,如果您像上面那样调用该方法,行为将与您预期的一样。
发布于 2009-05-01 16:33:21
使用options散列几乎总是更好。
def ldap_get(base_dn, filter, options = {})
options[:scope] ||= LDAP::LDAP_SCOPE_SUBTREE
...
end
ldap_get(base_dn, filter, :attrs => X)
发布于 2014-07-15 03:00:28
随着时间的推移,从版本2开始,Ruby支持命名参数:
def ldap_get ( base_dn, filter, scope: "some_scope", attrs: nil )
p attrs
end
ldap_get("first_arg", "second_arg", attrs: "attr1, attr2") # => "attr1, attr2"
https://stackoverflow.com/questions/812058
复制相似问题