今天花了我很长一段时间,我最终找到了原因,但仍然没有得到逻辑
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
我想我在我的代码中已经在数百个地方使用了“或”运算符,老实说,我不再相信“或”...
有人可以解释一下“逻辑”吗?
答案 0 :(得分:4)
根据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
答案 1 :(得分:3)
首先,表达式false or true
,true or false
,false || true
和true || 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
的优先级低于=