我puts _|_
对 Ruby 中的工作方式感到困惑。如果您输入一个变量,然后调用该语句
3
puts _|_
你得到变量的名称,后跟 nil
3
=> nil
但是,如果您再次键入它,您会得到错误
puts _|_
=> false
它看起来不像是那些以美元符号开头的类似 Perl 的变量之一。
这个奇怪的符号到底是什么意思,它是如何工作的?
控制台(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
。
_
是一个 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
在 ruby_
中是一个有效的标识符。
InIRB
_
包含最后一个表达式的值。
2.1.5 :001 > 100
=> 100
2.1.5 :002 > _
=> 100
_
是一个 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
这就是为什么放| 返回假。