什么是|| =在Ruby语言中意味着什么?

doe*_*oel 8 ruby

可能重复:
Ruby中的|| =是什么意思?

下面的行是什么意思?

a ||= {} 
a ||= 1
Run Code Online (Sandbox Code Playgroud)

在irb中,它总是为上述两行返回a的类,作为哈希.提前致谢.

Mat*_*ley 16

||=是赋值运算符,它返回指定的值.a ||= b等于声明a || a = b,如果a设置并具有一些真值,则它保持不变,否则取值为b.

在您的示例a中,只设置一次,这解释了您注意到的行为.

a ||= {} 
a ||= 1 // a is still {}
Run Code Online (Sandbox Code Playgroud)

我见过的典型用法是初始化静态变量,即.

class Foo
    def self.bar
        return @bar ||= {}
    end
end
Run Code Online (Sandbox Code Playgroud)

编辑:

值得一提的是,这||=是一个短路运营商.这意味着a ||= b它只会有一个赋值a = b.a = a在这种情况下永远不会有a非假的转让.这有点迂腐,但在某些(非常)边缘情况下很重要.

有关更多信息,请阅读|| =线程和页面的权威列表.