||= 在 Ruby 语言中是啥意思? [复制]

Posted

技术标签:

【中文标题】||= 在 Ruby 语言中是啥意思? [复制]【英文标题】:what does a ||= mean in Ruby language? [duplicate]||= 在 Ruby 语言中是什么意思? [复制] 【发布时间】:2011-07-10 22:50:34 【问题描述】:

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

下面一行是什么意思?

a ||=  
a ||= 1

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

【问题讨论】:

@mladen 没错,但我个人会投票结束另一个问题,支持这个问题。这个在评分最高的答案中有更多最新/正确的信息。 重复:What does ||= mean in Ruby?、What does ||= mean in Ruby?、what is ||= in ruby?、Double Pipe Symbols in Ruby Variable Assignment?、What does the “||=” operand stand for in ruby、Is the ruby operator ||= intelligent? 可能还有很多其他的。 另见The definitive list of ||= (OR Equal) threads and pages。 What does ||= mean in Ruby? 和 What does ||= mean in Ruby? 甚至链接到相关问题 【参考方案1】:

||= 是一个赋值运算符,它返回分配的值。 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。

【讨论】:

您的示例是实例变量,而不是静态(或类)变量。那将是@@something。 [仍然是最好的答案:)] @Simon 刚刚注意到同样的事情。现在已修复(虽然,不是你的方式)。 它也经常用于检查-分配哈希中的东西(à-la:hash[key] ||= initial_value,特别是如果你接下来要做的是hash[key] += value,如果hash[key].nil?是真实的)。 @Romain 具有讽刺意味的是,这正是短路运算符这一事实很重要的极端情况。 dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case @Matthew 是的,这确实是在 99.9% 的情况下人们不会注意到的事情,尽管它有时会派上用场......另外,你指向的文章形式化为 @987654340 @ as x || x = a,这是我通常对 or 赋值的解释。【参考方案2】:

意思是

a = a || 

a =  unless a

【讨论】:

不完全是。如果 a 为 false,它还会将 a 设置为 。 是的,我刚刚注意到,谢谢 ;-) 如果它是真的,它不会分配给 a。【参考方案3】:

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

【讨论】:

它不是检查 a 是否被定义,而是检查 a 是否为真(例如既不假也不为零)。 嗯,更准确地说...它检查“a”是否为 false、nil 或 UNDEFINED 并相应地分配“a”! 对,UNDEFINED 不是真的,这是真的 :)

以上是关于||= 在 Ruby 语言中是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]

这在 C 语言中是啥意思? [复制]

&: 在红宝石中是啥意思,它是一个混合了符号的块吗? [复制]

& 是啥意思。 (& 点)在 Ruby 中是啥意思?

@@variable 在 Ruby 中是啥意思?

这个语法在ruby中是啥意思[重复]