_
的特殊含义是作为最后一个返回值的占位符,但这不是我在这里询问的内容。相反,我在询问在普通的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.的this discussion引起的。
|_,_,...|
中,因为重复错误已被抑制。 - mu is too short