为什么块变量是可选的?

时间:2013-08-01 06:44:23

标签: ruby block optional-parameters

非块变量是强制性的:

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

像这样设计的块变量与非块变量相比有什么优势?

1 个答案:

答案 0 :(得分:5)

当没有给出块时抛出错误没有多大意义,因为如果没有块,任何使用yieldblock.call的方法都会抛出错误。 提供默认块也没有多大意义,因为要执行的默认代码只能写入方法本身(这比编写内联参数更简洁)。

相关问题