ruby - "or"和 | 之间有什么区别?在 ruby ?

标签 ruby logical-operators

我认为唯一的区别在于 ||| 之间,其中 | 等同于 。但我意识到后者是不正确的,现在我很困惑。

修改:我理解这个问题不同于ruby bitwise or而我的是对评论和答案中指出的按位运算符和 bool 运算符之间的区别缺乏理解。 此外,在我看来,这个问题的答案与问题本身更加相关和清晰。标记为重复会阻止用户获得更好的答案。

最佳答案

| 运算符是一个二进制数学 运算符,即它执行二进制 OR 并在数字级别上工作:

1 | 2
# => 3
4 | 3
# => 7
1 | 2 | 3
# => 3

这是因为它在处理单个值时就好像它们是二进制的一样:

0b01 | 0b10
# => 3 (0b11)

|| 运算符是一个逻辑 运算符,即它返回逻辑上为真的第一个值。在 Ruby 中,只有文字 nilfalse 值在逻辑上计算为假,其他所有内容,包括 0、空字符串和数组,都是真。

所以:

1 || 2
# => 1
0 || 1
# => 0

or 运算符的工作原理几乎与 || 完全相同,只是它的优先级低得多。这意味着首先评估其他运算符,如果您没有预料到这一点,可能会导致一些问题:

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

a = false or true
# => true
a
# => false

这是因为它实际上被解释为:

(a = false) or true

这是因为 = 有一个 higher precedence评价时。

关于ruby - "or"和 | 之间有什么区别?在 ruby ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45043727/

相关文章:

ruby-on-rails -::ModuleName::ClassName 和 ModuleName::ClassName 有什么区别

ruby - 从 Ruby 脚本创建 Gist

c++ - 如何使用逻辑与运算符 (&&) C++ 调用两个函数

javascript - If 语句不适用于 And (&&) 运算符

javascript - 这些逻辑运算是否相同?

scala - 了解 | scala中的运算符

ruby - 如何将简单的时间字符串解析为时间段?

ruby - OS X Homebrew 需要为 cmake 创建构建目录

ruby - 如果数组包含其他数组,如何检查 Ruby?

c++ - 带逻辑或的 IF 语句