【发布时间】:2015-08-05 12:03:21
【问题描述】:
我对 puts _|_ 在 Ruby 中的工作方式感到困惑。如果你输入一个变量然后调用那个语句
3
puts _|_
你得到变量的名称,后跟 nil
3
=> nil
但是,如果你再次输入,你会得到错误
puts _|_
=> false
它看起来不像是那些以美元符号开头的类似 Perl 的变量之一。
这个奇怪的符号到底是什么意思,它是如何工作的?
【问题讨论】:
我对 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 _ 中包含最后一个表达式的值。
2.1.5 :001 > 100
=> 100
2.1.5 :002 > _
=> 100
【讨论】:
_是一个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
【讨论】:
_ 是一个 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
这就是为什么 puts | 返回 false。
【讨论】: