我是Ruby的新手。
||
和||=
之间有什么区别?
>> a = 6 || 4
=> 6
>> a ||= 6
=> 6
听起来他们是一样的。
答案 0 :(得分:4)
||=
才会将左侧值设置为右侧值。
在这种情况下,6和4都是真实的,因此a = 6 || 4
会将a
设置为第一个真值,即6
。
a ||= 6
为假时, a
才会将a
设置为6。也就是说,如果它是零或假。
a = nil
a ||= 6
a ||= 4
a # => 6
答案 1 :(得分:4)
x ||= y
表示如果x null或未定义或false ,则将y
分配给x
;它是x = y unless x
的快捷方式。使用Ruby短路运算符
||
,如果左操作数是真值,则不评估右操作数。
现在我在||=
上面的一些简单示例:
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
答案 2 :(得分:3)
a || = 6仅指定6,如果尚未分配。 (实际上,正如克里斯所说,是假的)
a = 4 a ||= 6 => 4 a = 4 || 6 => 4
答案 3 :(得分:2)
您可以将a ||= 6
展开为
a || a = 6
因此,如果a
不是a
或nil
,您可以看到它使用false
,否则它会将值分配给a
并返回该值。这通常用于值的记忆。
<强>更新强>
感谢第一条评论指出||=
(或等于)运算符的真正扩展。我学到了一些新东西,发现了这个有趣的帖子。 http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case
答案 4 :(得分:1)
表达式a = 6 || 4
和a ||= 6
都返回相同的结果,但区别在于||=
如果此变量为nil或false,则为变量赋值。