【发布时间】:2015-07-09 14:04:18
【问题描述】:
我已经看到 smarterer.com 测试过这个东西。我已经像这样在 irb 中对其进行了测试:
2.2.0 :019 > puts _|_
13
=> nil
2.2.0 :020 > c = a.to_s.to_i;c+=1;i=13;puts _|_
false
=> nil
如此奇怪的行为。那么这个东西是什么,应该怎么做呢?
【问题讨论】:
我已经看到 smarterer.com 测试过这个东西。我已经像这样在 irb 中对其进行了测试:
2.2.0 :019 > puts _|_
13
=> nil
2.2.0 :020 > c = a.to_s.to_i;c+=1;i=13;puts _|_
false
=> nil
如此奇怪的行为。那么这个东西是什么,应该怎么做呢?
【问题讨论】:
这是三个令牌。 _, 和|, 和_,它只适用于IRB或其他定义_的环境。
这个:
puts _|_
...与此相同...
puts _ | _
...这是变量_ 与自身的简单按位或。
我能想到这样做的唯一原因是,它会将nil 转换为false,以防您需要一个真正的布尔值,而不仅仅是一个虚假值:
irb(main):001:0> nil | nil
=> false
否则,对于支持 | 的类型,a | a 将始终为 a,而某些内置类型则为 notable exception。
【讨论】:
_ 未在irb 中定义
_ 是 IRB 中最后一个表达式的值。试试看。
_;当你开始 IRB 时,它是nil:pastebin.com/YVfSudg7
a | a 永远是a" - 不一定。类可以以不同的方式实现|。 Array#| 返回一个集合并集,即ary | ary 等价于ary.uniq
|做任何你想做的事,但这几乎不在这里或那里”。但是内置类已经做到这一点是非常好的。