大多数人都知道 _
在 IRB 中作为最后返回值的持有者的特殊意义,但这就是我在这里要问的 没有。
相反,我在询问在普通的 Ruby 代码中将 _
用作变量名的情况。在这里,它似乎有一种特殊的行为,类似于“不在乎变量”(如 Prolog)。这里有一些有用的例子来说明它独特的行为:
lambda { |x, x| 42 } # SyntaxError: duplicated argument name
lambda { |_, _| 42 }.call(4, 2) # => 42
lambda { |_, _| 42 }.call(_, _) # NameError: undefined local variable or method `_'
lambda { |_| _ + 1 }.call(42) # => 43
lambda { |_, _| _ }.call(4, 2) # 1.8.7: => 2
# 1.9.3: => 4
_ = 42
_ * 100 # => 4200
_, _ = 4, 2; _ # => 2
这些都是在 Ruby 中直接运行的(添加了 puts
) ,而不是 IRB,以避免与其附加功能发生冲突。
不过,这都是我自己实验的结果,因为我在任何地方都找不到关于这种行为的任何文档(诚然,这不是最容易搜索的东西)。最后,我很好奇所有这些在内部是如何工作的,这样我就可以更好地理解 _
到底有什么特别之处。因此,我要求参考文档,最好是 Ruby 源代码(也许还有 RubySpec) ,它揭示了 _
在 Ruby 中的行为。
注意: 这大部分来自 这个讨论和 @ Niklas B.