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

时间:2011-03-08 08:43:01

标签: ruby

  

可能重复:
  What does ||= mean in Ruby?

下面的内容是什么意思?

a ||= {} 
a ||= 1

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

3 个答案:

答案 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的分配。这有点迂腐,但在某些(非常)边缘情况下很重要。

有关详细信息,请read the definitive list of ||= threads and pages

答案 1 :(得分:0)

这意味着

a = a || {}

a = {} unless a

答案 2 :(得分:0)

你可以这样读“a || = {}”。如果定义了“a”,则忽略右侧的表达式。否则,设置“a”等于右侧的表达式。在第一行中,“a”可能未定义,因此该行将“a”设置为右侧的表达式,即空哈希。在第二行,“a”已设置为{},因此它忽略右侧的值为1的表达式。