Bru*_*nes 120 ruby optional-parameters
如果我定义这样的Ruby函数:
def ldap_get ( base_dn, filter, scope=LDAP::LDAP_SCOPE_SUBTREE, attrs=nil )
Run Code Online (Sandbox Code Playgroud)
我怎么称它只提供前2个和最后一个args?为什么不是这样的
ldap_get( base_dn, filter, , X)
Run Code Online (Sandbox Code Playgroud)
可能的,或者如果可能,怎么办?
jsh*_*hen 137
使用选项哈希几乎总是更好.
def ldap_get(base_dn, filter, options = {})
options[:scope] ||= LDAP::LDAP_SCOPE_SUBTREE
...
end
ldap_get(base_dn, filter, :attrs => X)
Run Code Online (Sandbox Code Playgroud)
tom*_*fro 130
目前ruby无法做到这一点.您不能将"空"属性传递给方法.你能得到的最接近的是通过nil:
ldap_get(base_dn, filter, nil, X)
Run Code Online (Sandbox Code Playgroud)
但是,这会将范围设置为nil,而不是LDAP :: LDAP_SCOPE_SUBTREE.
您可以做的是在方法中设置默认值:
def ldap_get(base_dn, filter, scope = nil, attrs = nil)
scope ||= LDAP::LDAP_SCOPE_SUBTREE
... do something ...
end
Run Code Online (Sandbox Code Playgroud)
现在,如果您按上述方法调用方法,则行为将如您所愿.
ste*_*lag 51
时间已经过去了,因为版本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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
172660 次 |
| 最近记录: |