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