|与||作为Ruby中的包容性OR

时间:2015-02-14 06:06:24

标签: ruby

我已经习惯使用Ruby或运算符||

false || true
#=> true
false || false
#=> false

但是我也注意到你可以使用单一管道|

false | true
#=> true
false | false
#=> false

除了单个管道|作为Fixnum上的按位OR运算符和惯例,首选||优于|之外,还有其他原因吗?

1 个答案:

答案 0 :(得分:3)

ruby中的

truefalse分别是TrueClassFalseClass的实例。主要区别在于||是ruby运算符,而|TrueClassFalseClass的方法。

正如documentation of TrueClass

中所述
  

或 - 返回true。由于anObject是方法调用的参数,因此始终对其进行求值; 在这种情况下没有短路评估

使用它,例如以简写方式转换为布尔值:

val = 5
puts (true & val)
#⇒ true

并且,因为操作数始终被评估,所以在链中:

(true | myFunc(...)) && ...