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

28 浏览
0 Comments

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

今天我花了很长时间,最终找到了原因,但仍然不理解其中的逻辑。

x = (复杂表达式求值为false) or (复杂表达式求值为true)
x => false

非常奇怪... 经过试验发现

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

我猜我在我的代码中使用了数百次"or"运算符,老实说,我不再信任"or"...

有人能解释一下这个"逻辑"吗?

0
0 Comments

在这个表达式中,出现了两个部分。首先是赋值部分:

x = (复杂表达式求值结果为false)

如果赋值部分返回的结果是 false,则会继续评估第二个表达式。但是即使第二个表达式为 true,x 的值仍然是 false。

这是因为 or 运算符的优先级低于 = 运算符,导致这种情况发生。

要解决这个问题,可以使用括号明确指定赋值和 or 运算的顺序,例如:

x = ((复杂表达式求值结果为false) or (复杂表达式求值结果为true))

或者使用双竖线 || 运算符代替 or 运算符,因为 || 运算符的优先级高于 = 运算符,例如:

x = (复杂表达式求值结果为false) || (复杂表达式求值结果为true)

这样就可以确保赋值和 or 运算按照预期的顺序执行,得到正确的结果。

0
0 Comments

首先,表达式false or truetrue or falsefalse || truetrue || false都是true。如果你在irb中输入这些表达式,你会看到它们的结果都是true

你的代码不像你期望的那样工作的原因是or=的优先级不同。x = y or z的解析方式是(x = y) or z,而不是x = (y or z)。而||的解析方式是x = (y || z),因为||的优先级更高。

为了解决这个问题,你可以使用括号来明确表达式的优先级。你可以将代码改为(false or true) != (true or false) != true || false来确保表达式按照你的期望进行求值。这样,不同的部分会根据运算符的优先级进行求值,从而得到正确的结果。

总结起来,false or true != true or false != true || false这个问题出现的原因是or=的优先级不同,导致表达式按照不正确的顺序进行求值。解决方法是使用括号明确表达式的优先级,确保表达式按照期望进行求值。

0
0 Comments

在上述内容中,讨论了Ruby中逻辑运算符or和||的优先级问题。根据Ruby的运算符优先级表,or的优先级低于=,因此表达式x = true or false将被计算为(x = true) or false。而||的优先级高于=,因此表达式x = true || false将被计算为x = (true || false)。

在给出的例子中,首先执行了x = false or true,这意味着先执行了赋值操作x = false,再进行逻辑运算or,但由于false or true的结果为true,所以最终的结果是false。接下来执行了x = false || true,这意味着先执行了逻辑运算||,再进行赋值操作x = true,由于false || true的结果为true,所以最终的结果是true。

这个问题的出现是因为在逻辑运算符or和||的优先级不同,导致了表达式的计算顺序和结果不同。为了解决这个问题,可以使用括号来明确指定计算顺序,或者根据运算符的优先级规则来调整表达式的写法。

因此,可以将表达式(false or true != true or false != true || false)的括号写法为((false or true) != (true or false) != true) || false,或者根据运算符优先级规则,将其写为((false or true) != (true or false)) != true || false。

0