Ruby 为什么块变量是可选的?
非块变量是必需的:Ruby 为什么块变量是可选的?,ruby,block,optional-parameters,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 # =>
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
与非块变量相比,这样设计块变量有什么好处?当没有给出块时抛出错误没有多大意义,因为任何使用
的方法都会产生或块。如果没有块,调用无论如何都会抛出错误。
提供默认块也没有多大意义,因为要执行的默认代码可以直接写入方法本身(这比将其与参数内联编写要简洁得多)