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

可能重复:
什么|| =在Ruby中意味着什么?

下面的行是什么意思?

a ||= {} a ||= 1 

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

||=是赋值运算符,它返回赋值。 a ||= b等同于语句a || 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的赋值。 这有点迂腐,但在某些(非常)边缘情况下很重要。

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

它的意思是

 a = a || {} 

 a = {} unless a 

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