Ruby 的“或”与“||” [复制]
Posted
技术标签:
【中文标题】Ruby 的“或”与“||” [复制]【英文标题】:Ruby's 'or' vs '||' [duplicate] 【发布时间】:2011-12-27 08:04:52 【问题描述】:可能重复: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
与 ||
的故事是什么?他们应该作为替代品工作吗?使用or
代替||
是否有一些注意事项?
【问题讨论】:
虽然我同意这些问题是直接相关的,并且答案几乎相同,但它们并不是同一个问题。如果将第一个扩展为比较or
与 ||
以及 and
与 &&
,我同意它们是重复的。
另见 ***.com/questions/1434842/… , ***.com/questions/3904888/… , &c.
【参考方案1】:
这里的问题是优先级。 or
的优先级低于 ||
。因此,您的第一条语句的计算结果为
(x = nil) or 4
表达式的结果是4
(这就是为什么你认为它在irb
中正常工作的原因),但是x
被分配了nil
,因为or
具有更低优先于=
。
||
版本可以满足您的需求:
x = (nil || 4)
【讨论】:
【参考方案2】:or
的优先级低于||
和=
- 这意味着赋值在or
之前执行。而||
的优先级高于=
并首先执行。
【讨论】:
【参考方案3】:or
的优先级(非常)低。
【讨论】:
以上是关于Ruby 的“或”与“||” [复制]的主要内容,如果未能解决你的问题,请参考以下文章