在 Ruby 中,puts _|_ 是如何工作的?

In Ruby, how does puts _|_ work?

我对 puts _|_ 在 Ruby 中的工作方式感到困惑。如果您输入一个变量然后调用该语句

3
puts _|_

你得到变量名后跟 nil

 3
 => nil

但是,如果您再次输入,则会得到 false

puts _|_
=> false

它看起来不像那些以美元符号开头的类似 Perl 的变量之一。

这个奇怪的符号到底是什么意思,它是如何工作的?

_是一个ruby特殊变量,用来获取前面表达式的结果。

irb(main):030:0> 3
=> 3
irb(main):031:0> _
=> 3
irb(main):032:0> _.to_s
=> "3"
irb(main):033:0> _
=> "3"

名称以小写字母(a-z)或下划线(_)开头的ruby变量是局部变量或方法调用。未初始化的实例变量的值为 nil。

irb(main):001:0> _
=> nil
irb(main):002:0> _ | _
=> false
irb(main):003:0> nil | nil
=> false

控制台(IRB 或 pry)中的下划线代表上一个命令的结果。所以

3
=> 3
puts _|_
3
=> nil

此处上面的puts语句等同于

puts 3 <bit-wise or> 3

其中 puts 3|3 等于 puts 3.

因为putsreturnsnil,当你重复puts _|_它变成

puts nil|nil

... 即 puts false.

在 ruby _ 中是一个有效的标识符。

In IRB _ 包含最后一个表达式的值。

2.1.5 :001 > 100
 => 100
2.1.5 :002 > _
 => 100

_是一个ruby特殊变量,这个变量存储了前面expression/command的输出,所以当你做:

1.9.3-p0 :043 > 3
 => 3

'_' 包含值 3,因为 return 前一个表达式的值为 3。当您使用 puts 时,如下所示:

1.9.3-p0 :045 > puts _|_
3
 => nil

它的return值为nil.Next执行|的时间如下:

1.9.3-p0 :049 > _|_
 => false

它 return 是假的,因为它与下面的表达式相同:

1.9.3-p0 :050 > nil|nil
 => false

这就是为什么 | returns false.