答案 0 :(得分:16)
||=
是一个赋值运算符,它返回赋值。 a ||= b
等同于语句a || a = b
,这意味着如果设置a
并且具有一些真值,则它保持不变,否则它将取b
的值。
在您的示例中a
只设置一次,这解释了您注意到的行为。
a ||= {}
a ||= 1 // a is still {}
我见过的典型用法是初始化静态变量,即
class Foo
def self.bar
return @bar ||= {}
end
end
编辑:
值得一提的是||=
是一个短路运营商。这意味着在a ||= b
的情况下,只有a = b
的作业。在a = a
非假的情况下,永远不会有a
的分配。这有点迂腐,但在某些(非常)边缘情况下很重要。
答案 1 :(得分:0)
这意味着
a = a || {}
即
a = {} unless a
答案 2 :(得分:0)
你可以这样读“a || = {}”。如果定义了“a”,则忽略右侧的表达式。否则,设置“a”等于右侧的表达式。在第一行中,“a”可能未定义,因此该行将“a”设置为右侧的表达式,即空哈希。在第二行,“a”已设置为{},因此它忽略右侧的值为1的表达式。