【问题标题】:Number of optional arguments for a method in Ruby 1.8.7Ruby 1.8.7 中方法的可选参数数量
【发布时间】:2026-02-05 18:20:07
【问题描述】:

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

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

我如何确定有 2 个可选参数?请记住,这是 Ruby 1.8.7

更新

抱歉问题不清楚,在调用该方法之前我需要知道可选参数的数量。例如

method_def = self.instance_method(:foo)
# check for number of args
# call method if it meets some kind of criteria

【问题讨论】:

    标签: ruby ruby-on-rails-3.1


    【解决方案1】:

    我不认为你可以。事实上,我认为这也是 Ruby 1.9 中引入{Proc, Method, UnboundMethod}#parameters 的原因之一:

    instance_method(:foo).parameters.count {|type,| type == :opt }
    # => 2
    

    【讨论】:

    • 根据我在网上阅读的内容,您可能是对的。我会再等一会儿,看看是否有人有解决方法。
    • 所以,我猜那个绿色的复选框意味着你已经放弃了 ;-)
    • 是的,对此有非常强烈的共识 :) 我将不得不修补补丁......但是哦,有时也需要这样做。
    【解决方案2】:

    你可以像这样定义你的方法:

    def foo(a,b,*p)
      number_of_arguments = p.size
    
      c = p[0]
      d = p[1]      
    end
    

    更多信息可以在“可选参数”下找到here

    【讨论】:

    • @the OP,这些通常称为“splat 参数”,可能对谷歌搜索有用。
    • 您也可以这样做:c, d = p。短得多:)
    • 更新了问题,更具体的道歉。