Ruby的'或'vs'||'

时间:2011-11-11 20:45:44

标签: ruby

  

可能重复:
  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代替||时是否有一些注意事项?

3 个答案:

答案 0 :(得分:13)

这里的问题是优先权。 or的优先级低于||。所以,你的第一个语句评估为

(x = nil) or 4

表达式的结果是4(这就是为什么您认为它在irb中正常工作的原因),但x已分配{{1}因为nil的优先级低于or的优先级。

=版本可以满足您的需求:

||

答案 1 :(得分:4)

or的优先级低于||= - 这意味着分配在or之前执行。虽然||的优先级高于=,但会先执行。

答案 2 :(得分:2)

or具有(非常)较低的优先级。