可能重复:
Difference between “and” and && in Ruby?
Ruby: difference between || and 'or'
我有这个代码(类似这样的代码)
foo = nil or 4
我希望foo
成为第一个值(可能是nil
),或者是默认值4.当我在irb中测试时,输出就是我所期望的。傻了,我以后没有检查foo
的价值。过了一会儿,我开始注意到我的代码中出现了一些错误,直到我在irb中检查foo
的值,我才发现问题,这真是令人惊讶,nil
而不是预期的4。
关于or
vs ||
的故事是什么?它们应该作为替代品吗?使用or
代替||
时是否有一些注意事项?
答案 0 :(得分:13)
这里的问题是优先权。 or
的优先级低于||
。所以,你的第一个语句评估为
(x = nil) or 4
表达式的结果是4
(这就是为什么您认为它在irb
中正常工作的原因),但x
已分配{{1}因为nil
的优先级低于or
的优先级。
=
版本可以满足您的需求:
||
答案 1 :(得分:4)
or
的优先级低于||
和=
- 这意味着分配在or
之前执行。虽然||
的优先级高于=
,但会先执行。
答案 2 :(得分:2)
or
具有(非常)较低的优先级。