Ruby 1.8.7中一个方法的可选参数数量

3

不确定是否有答案,但希望有人知道。我正在尝试获取Ruby 1.8.7中方法的可选参数数量。Method#arity无法使用,因为它返回-n-1,其中n是方法所需参数的数量。我需要的是可选参数的数量?例如:

def foo(a,b,c=4,d=3)
  # ...
end

我该如何确定有两个可选参数?请记住这是Ruby 1.8.7 更新 抱歉问题不够清晰,我需要在调用方法之前知道可选参数的数量。例如:
method_def = self.instance_method(:foo)
# check for number of args
# call method if it meets some kind of criteria
2个回答

1
您可以像这样定义您的方法:
def foo(a,b,*p)
  number_of_arguments = p.size

  c = p[0]
  d = p[1]      
end

更多信息可以在“可选参数”下这里找到。


@楼主,这些通常被称为“展开参数”,可能对Google搜索非常有用。 - Chris Heald
你也可以这样做:c, d = p。更短了 :) - Sergio Tulentsev
更新了问题,更加具体,抱歉。 - Haris Krajina

1
我认为你做不到。事实上,我认为这是 Ruby 1.9 中引入 {Proc, Method, UnboundMethod}#parameters 的原因之一:
instance_method(:foo).parameters.count {|type,| type == :opt }
# => 2

根据我在网上阅读的内容,你可能是正确的。我会再等一段时间,看看是否有人有解决方法。 - Haris Krajina
所以,我猜那个绿色的复选框意味着你已经放弃了;-) - Jörg W Mittag
是的,关于这个问题有相当强烈的共识 :) 我将不得不进行猴子补丁...但有时这也是必要的。 - Haris Krajina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接