【发布时间】:2011-07-10 22:50:34
【问题描述】:
【问题讨论】:
-
@mladen 没错,但我个人会投票结束另一个问题,支持这个问题。这个在评分最高的答案中有更多最新/正确的信息。
标签: ruby
【问题讨论】:
标签: ruby
||= 是一个赋值运算符,它返回分配的值。 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。这有点迂腐,但在某些(非常)极端情况下很重要。
【讨论】:
@@something。 [仍然是最好的答案:)]
hash[key] ||= initial_value,特别是如果你接下来要做的是hash[key] += value,如果hash[key].nil?是真实的)。
x || x = a,这是我通常对 or 赋值的解释。
意思是
a = a || {}
即
a = {} unless a
【讨论】:
你可以这样读“a ||= {}”。如果定义了“a”,则忽略右侧的表达式。否则,设置“a”等于右侧的表达式。在第一行中,“a”可能是未定义的,因此该行将“a”设置为右侧的表达式,即空哈希。在第二行,“a”已设置为 {},因此它忽略了右侧值为 1 的表达式。
【讨论】: