【问题标题】:Why are block variables optional?为什么块变量是可选的?
【发布时间】: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


    【解决方案1】:

    没有给出块时抛出错误没有多大意义,因为如果没有块,任何使用yieldblock.call 的方法都会抛出错误。 提供默认块也没什么意义,因为要执行的默认代码可以直接写入方法本身(这比将其与参数内联写入要简洁得多)。

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      相关资源
      最近更新 更多