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