假或真!=真或假!=真||错误[重复]

Posted

技术标签:

【中文标题】假或真!=真或假!=真||错误[重复]【英文标题】:false or true != true or false != true || false [duplicate] 【发布时间】:2014-02-17 06:39:51 【问题描述】:

今天弄了好久,终于找到原因了,但还是不明白逻辑

x = (complex expression evaluating to false) or (complex expression evaluating to true)

x => false

很奇怪……经过实验发现

false or true => false
true or false => true
false || true => true
true || false => true

我想我在代码中的数百个地方都使用了“或”运算符,老实说,我不再相信“或”了......

有人可以解释一下“逻辑”吗?

【问题讨论】:

您的第二个块并不完全正确。你实际上有类似x = false or true; p x # => false 的东西,对吧?当分配发生时,你会感到困惑。简而言之,赋值只是另一个运算符,它在 before orafter || 处理。通常你想要||,但or 的语义有时仍然有用。 【参考方案1】:

根据precedence 表or 的优先级低于=。因此x = true or false 将被评估为(x = true) or false。但|| 的优先级高于=x = true || false 将被评估为x = (true || false)

x = false or true
x # => false
x = false || true
x # => true

【讨论】:

【参考方案2】:

首先false or truetrue or falsefalse || truetrue || false都是true。如果你把它们输入到 irb 中,你会看到的。

您的代码无法按预期运行的原因是or= 的优先级。 x = y or z 被解析为 (x = y) or z,而不是 x = (y or z)。对于||,它被解析为x = (y || z),因为|| 具有更高的优先级。

【讨论】:

【参考方案3】:
x = ((complex expression evaluating to false) or (complex expression evaluating to true))
# or
x = (complex expression evaluating to false) || (complex expression evaluating to true)

在这个表达式中

x = (complex expression evaluating to false) or (complex expression evaluating to true)

这里实际上是其中两个。首先是赋值

x = (complex expression evaluating to false)

如果赋值返回false,第二个表达式将被计算。但即使第二个表达式为真,x 也将是 false

这是因为or 的优先级低于=

【讨论】:

以上是关于假或真!=真或假!=真||错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

逻辑与推理

VBA:比较两个字符串逻辑并返回真或假

PHP - 根据用户单击的按钮返回真或假

如何检查 jQuery 查找返回真或假? [复制]

C++ 'true' 和 'false' 关键字在 Visual C++ 6.0 中突然不是真或假

TypeError Ajax Post - Flask Python [重复]