|| 之间的区别和||=? [复制]
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
不是nil
或false
,它使用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 || 4
和 a ||= 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 之间的区别? [复制]