3

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

3
puts _|_

你得到变量的名称,后跟 nil

 3
 => nil

但是,如果您再次键入它,您会得到错误

puts _|_
=> false

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

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

4

4 回答 4

6

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

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

这里上面的puts语句变成了等价于

puts 3 <bit-wise or> 3

puts 3|3等于puts 3。_

由于puts返回nil,当你重复它时,puts _|_它变成

puts nil|nil

...这是puts false

于 2015-05-23T15:02:11.390 回答
3

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

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

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

irb(main):001:0> _
=> nil
irb(main):002:0> _ | _
=> false
irb(main):003:0> nil | nil
=> false
于 2015-05-23T15:00:52.700 回答
3

在 ruby_​​ 中是一个有效的标识符。

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

2.1.5 :001 > 100
 => 100
2.1.5 :002 > _
 => 100
于 2015-05-23T15:03:13.680 回答
0

_是一个 ruby​​ 特殊变量,这个变量存储了前一个表达式/命令的输出,所以当你这样做时:

1.9.3-p0 :043 > 3
 => 3

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

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

它的返回值为 nil。下次执行| 如下:

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

它返回 false 因为它与下面的表达式相同:

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

这就是为什么放| 返回假。

于 2015-05-23T18:21:04.353 回答