如果尚未赋值,则进行赋值。像这样:
a = nil
a ||= 1
a = 1
a ||= 2
在第一个示例中,a将被设置为1。在第二个示例中,a仍将保持为1。
a = :foo
b ||= a
# b == :foo
a = :foo
b = :bar
b ||= a
# b == :bar
我只能猜测,但我假设它代表一个逻辑运算符与设置变量相结合(就像其他语言中的 ^=、+=、*=)
因此,x ||= y
等同于 x = x || y
编辑:我的猜测是正确的,请参见http://phrogz.net/ProgrammingRuby/language.html#table_18.4
x = x || y
的意思是:如果已设置 x,则使用 x;否则分配 y。它可用于确保变量至少被初始化(为 0、为空数组等)。
coalesce
运算符。 - oxbow_lakesnil
和false
都是假值。因此,如果您处理的是布尔值,则无法区分“未分配”和“已分配为 false”,后面的a ||= true
将覆盖现有的false
值。(与 SQL 的三元逻辑coalesce()
不同:https://www.db-fiddle.com/f/6JMNY7TLVEgTa4GdWg74Sc/0) - Beni Cherniavsky-Paskin