【发布时间】:2010-11-26 05:18:41
【问题描述】:
【问题讨论】:
【问题讨论】:
如果尚未分配,它会分配一个值。像这样:
a = nil
a ||= 1
a = 1
a ||= 2
在第一个示例中,a 将设置为 1。在第二个示例中,a 仍为 1。
【讨论】:
coalesce 运算符
nil 和false 都是假的。因此,如果您使用的值是布尔值,它不会区分“未分配”和“分配给假”,稍后a ||= true 将覆盖现有的false 值。 (不同于 SQL coalesce() 三元逻辑:db-fiddle.com/f/6JMNY7TLVEgTa4GdWg74Sc/0)
【讨论】:
如果 b 为 nil,则将 a 赋值给它。
a = :foo
b ||= a
# b == :foo
如果 b 不为零,则不要更改它。
a = :foo
b = :bar
b ||= a
# b == :bar
【讨论】:
这是一个“缩写作业”(参见 Ruby Pocket Reference,第 10 页)
a = a ||
(意思是a被赋值为a,b的逻辑或形成的值
变成
a ||= b
几乎所有运算符都有缩写版本(+= *= &&= 等)。
【讨论】:
我只能猜测,但我认为它代表与设置变量相结合的逻辑运算符(如其他语言中的 ^=、+=、*=)
所以x ||= y 与x = x || y 相同
编辑:我猜对了,见http://phrogz.net/ProgrammingRuby/language.html#table_18.4
x = x || y 表示:如果设置则使用 x,否则分配 y。它可用于确保变量至少已初始化(为 0、为空数组等)
【讨论】: