首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby可选参数

Ruby可选参数
EN

Stack Overflow用户
提问于 2009-05-01 16:16:42
回答 7查看 179.4K关注 0票数 123

如果我像这样定义Ruby函数:

代码语言:javascript
复制
def ldap_get ( base_dn, filter, scope=LDAP::LDAP_SCOPE_SUBTREE, attrs=nil )

我怎么能说它只提供前两个和最后一个参数呢?为什么不像这样的东西

代码语言:javascript
复制
ldap_get( base_dn, filter, , X)

可能,或者如果它是可能的,怎么做?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-01 16:24:02

这在ruby中是不可能的。不能将“empty”属性传递给方法。你能得到的最接近的方法是传递nil:

代码语言:javascript
复制
ldap_get(base_dn, filter, nil, X)

但是,这会将作用域设置为nil,而不是LDAP::LDAP_SCOPE_SUBTREE。

你能做的就是在你的方法中设置默认值:

代码语言:javascript
复制
def ldap_get(base_dn, filter, scope = nil, attrs = nil)
  scope ||= LDAP::LDAP_SCOPE_SUBTREE
  ... do something ...
end

现在,如果您像上面那样调用该方法,行为将与您预期的一样。

票数 131
EN

Stack Overflow用户

发布于 2009-05-01 16:33:21

使用options散列几乎总是更好。

代码语言:javascript
复制
def ldap_get(base_dn, filter, options = {})
  options[:scope] ||= LDAP::LDAP_SCOPE_SUBTREE
  ...
end

ldap_get(base_dn, filter, :attrs => X)
票数 137
EN

Stack Overflow用户

发布于 2014-07-15 03:00:28

随着时间的推移,从版本2开始,Ruby支持命名参数:

代码语言:javascript
复制
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"
票数 54
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/812058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档