1

为什么x=1这里是可选参数:

proc {|x=1|}.arity                  # => 0 

查看文档(http://www.ruby-doc.org/core-2.0/Proc.html#method-i-arity),我没有看到任何解释为什么|x=1|意味着参数是可选|x|的,而意味着它不是可选的。

4

1 回答 1

2

|x=1|声明一个具有默认值的块参数。如果参数有一个默认值,这意味着它可以被省略,而是使用默认值。根据定义,任何可以省略的参数都是可选的。

虽然看起来 ruby​​ 1.9 允许您在块中省略任何参数,并且将简单地设置为nil.

因此,如果您根本不使用块参数默认值,您可以得到您想要的结果,而是手动执行。

# Your proc
proc { |x=1| puts x }.arity #=> 0
proc { |x=1| puts x }.call  #=> 1

# suggested edit
proc { |x| x ||= 1; puts x }.arity #=> 1
proc { |x| x ||= 1; puts x }.call  #=> 1
于 2013-06-13T22:15:45.767 回答