我认为唯一的区别是|和||之间的区别,其中|相当于or。但我意识到后者是不正确的,现在我很困惑。
:我理解这个问题与ruby按位或不同,而我的问题是缺乏对按位运算符和布尔运算符之间的区别的理解,正如这里在注释和答案中所指出的那样。此外,在我看来,这个问题的答案与问题本身更加相关和清晰。标记为重复将阻止用户获得更好的答案。
发布于 2017-07-11 20:30:29
|运算符是一个二进制数学运算符,即它做一个二进制或并在一个数值级别上工作:
1 | 2
# => 3
4 | 3
# => 7
1 | 2 | 3
# => 3这是因为它在处理单个值,就好像它们是二进制的:
0b01 | 0b10
# => 3 (0b11)||运算符是一个逻辑运算符,即它返回逻辑上为真的第一个值。在Ruby中,只有文本nil和false值在逻辑上为false,其他一切,包括0、空字符串和数组,都是正确的。
所以:
1 || 2
# => 1
0 || 1
# => 0or运算符的工作原理与||几乎完全一样,只是优先级要低得多。这意味着首先对其他操作符进行评估,如果您没有预料到这一点,这可能会导致一些问题:
a = false || true
# => true
a
# => true
a = false or true
# => true
a
# => false这是因为它实际上被解释为:
(a = false) or true这是因为=在被计算时有一个较高优先。
发布于 2017-07-11 21:20:12
||和or是一种特殊的内置运算符.这意味着他们可以(而且确实是这样)有不能用Ruby表达的行为。尤其是,||和or在它们的右操作数中是非严格的和懒惰的,而or实际上是一种严格和热切的语言。
OTOH,|与任何其他方法调用一样,只是一个方法调用。这绝对没有什么特别之处。这意味着:
而||和or是语言内置运算符,它们是
||和or之间唯一的区别是优先级:or的优先级非常低(并且它具有与and相同的优先级)。
https://stackoverflow.com/questions/45043727
复制相似问题