Ruby块和可选参数:{| x = 1 |}

时间:2013-06-13 22:11:18

标签: ruby

为什么x=1是一个可选参数:

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

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

1 个答案:

答案 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