false或true!= true或false!= true ||假

时间:2014-01-26 13:01:38

标签: ruby

今天花了我很长一段时间,我最终找到了原因,但仍然没有得到逻辑

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

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

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

3 个答案:

答案 0 :(得分:4)

根据precedenceor的优先级低于=。因此,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

答案 1 :(得分:3)

首先,表达式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),因为||具有更高的优先级。

答案 2 :(得分:1)

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的优先级低于=