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

Posted

技术标签:

【中文标题】|| 之间的区别和||=? [复制]【英文标题】:Difference between || and ||=? [duplicate] 【发布时间】:2013-07-01 22:54:27 【问题描述】:

我是 Ruby 新手。

||||= 有什么区别?

>> a = 6 || 4
=> 6
>> a ||= 6
=> 6

听起来他们是一样的。

【问题讨论】:

不是来自 Ruby,但 ||= 可能类似于 += ||=+= 非常不同。 【参考方案1】:

您可以将a ||= 6扩展为

a || a = 6

所以你可以看到如果a不是nilfalse,它使用a,否则它会将值分配给a并返回该值。这通常用于值的记忆。

更新

感谢第一条评论指出||=(或等于)运算符的真正扩展。我学到了一些新东西,并找到了这篇有趣的帖子来讨论它。 http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case

【讨论】:

这是错误的。它(诚然不直观)扩展到a || a = 6 我必须承认我从来没有想过这个扩展。 @EdS。你有来源或我可以检查的方法吗?我用它更新了我的答案,因为它确实有意义。 检查两个重复主题之一。我不得不承认,几年前我的想法和你一样,并回答了同样的问题,但我被一位知识渊博的 SO 成员纠正了。编辑:哎呀,我看到你找到了。【参考方案2】:

x ||= y 表示如果 x 为 null 或 undefined 或 false ,则将 y 分配给 x ;这是x = y unless x的快捷方式。

对于 Ruby 短路运算符 ||,如果左操作数为真,则不计算右操作数。

现在我在||= 上面的几行中提供了一些快速示例:

当 x 未定义且 n 为 nil

unless

y = 2
x = y unless x
x # => 2

n = nil
m = 2
n = m unless n
m # => 2

=||

y = 2
x ||= y
x # => 2

n = nil
m = 2
n ||= m
m # => 2

【讨论】:

【参考方案3】:

a = 6 || 4a ||= 6 两个表达式都返回相同的结果,但区别在于,||= 会在变量为 nil 或 false 时为变量赋值。

【讨论】:

【参考方案4】:

a ||= 6 仅在尚未分配的情况下分配 6。 (实际上,正如克里斯所说,虚假)

a = 4 一个 ||= 6 => 4 a = 4 || 6 => 4

【讨论】:

【参考方案5】:

||= 仅当左侧值为 false 时,才会将左侧值设置为右侧值。

在这种情况下,6 和 4 都是真值,所以a = 6 || 4 会将a 设置为第一个真值,即6

仅当a 为假时,a ||= 6 才会将 a 设置为 6。也就是说,如果它是 nil 或 false。

a = nil
a ||= 6
a ||= 4
a # => 6

【讨论】:

听起来像 undefined 也包括。根据上面的答案? 是的,您可以使用||= 定义以前未定义的变量。 @KitHo 是的,我确实包括了那个.. :)

以上是关于|| 之间的区别和||=? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

“head”和“header”标签之间的真正区别是啥? [复制]

estimatedHeightForRowAtIndexPath 和 heightForRowAtIndexPath 之间的区别? [复制]

RenderPartial 和 RenderPage 之间有啥区别吗? [复制]

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

sqlserver中日期时间和时间戳之间的区别? [复制]

“constinit”和“constexpr”之间的真正区别是啥? [复制]