【发布时间】:2013-08-01 06:44:22
【问题描述】:
非块变量是强制性的:
def foo arg; end
foo # => ArgumentError
为了允许可选参数,必须提供默认值:
def foo arg = nil; end
foo # => nil
但是块变量是可选的:
def foo █ end
foo # => nil
如果没有默认值,就给不存在的块变量赋值nil,实际上块变量不能取默认值:
def foo &block = ->{puts :foo}; end
# => syntax error
相反,方法可以采用定义中不需要的额外块:
def foo; end
foo{puts :foo} # => nil
这样设计的块变量与非块变量相比有什么优势?
【问题讨论】:
标签: ruby block optional-parameters