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 的“或”与“||” [复制]的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Python 或 Ruby 的 Amazon Book API? [复制]

Ruby - 按引用或按值的参数? [复制]

通过引用传递或通过复制传递 - Ruby 模块 [重复]

|| 之间的区别和||=? [复制]

Ruby 喜欢 JavaScript 中的范围? [复制]

ruby中的复制 dup clone