【发布时间】:2012-03-22 12:09:29
【问题描述】:
大多数人都知道 _ 在 IRB 中作为最后一个返回值的持有者的特殊含义,但这不是我在这里要问的。
相反,我问的是 _ 在普通旧 Ruby 代码中用作变量名时的情况。在这里,它似乎有特殊的行为,类似于“无关变量”(à la 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 中运行的(添加了putss)——不是 IRB——以避免与其附加功能发生冲突。
不过,这都是我自己实验的结果,因为我在任何地方都找不到关于这种行为的任何文档(诚然,这不是最容易搜索的东西)。最终,我很好奇所有这些在内部是如何工作的,因此我可以更好地了解_ 的特别之处。所以我要求参考文档,最好是 Ruby 源代码(可能还有 RubySpec),它揭示了 _ 在 Ruby 中的行为方式。
注意:这大部分来自this discussion 和@Niklas B.
【问题讨论】:
标签: ruby