我是红宝石的新手。
||和 和有什么不一样||=?
>> a = 6 || 4
=> 6
>> a ||= 6
=> 6
听起来他们是一样的。
||=仅当左侧值为 false 时,才会将左侧值设置为右侧值。
在这种情况下,6 和 4 都是真值,因此a = 6 || 4将设置a为第一个真值,即6。
a ||= 6仅当为 false时才会设置a为 6 a。也就是说,如果它是 nil 或 false。
a = nil
a ||= 6
a ||= 4
a # => 6
x ||= y表示如果 x 为null 或 undefined 或 false ,则赋值y给;这是一个捷径。xx = 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
a ||= 6 如果尚未分配,则仅分配 6。(实际上,假的,正如克里斯所说)
a = 4 一个 ||= 6 => 4 a = 4 || 6 => 4
您可以扩展a ||= 6为
a || a = 6
所以你可以看到它使用aif ais not nilor false,否则它将赋值a并返回该值。这通常用于值的记忆。
更新
感谢第一条评论指出||=(或等于)运算符的真正扩展。我学到了一些新东西,并找到了这篇有趣的帖子来讨论它。http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case
两个表达式都a = 6 || 4返回a ||= 6相同的结果,但不同之处在于||=如果该变量为 nil 或 false,则将值分配给变量。