在Ruby中,运算符 ||= 代表什么?

26

可能是重复问题:
||= 在 Ruby 中代表什么?

在谷歌中搜索此符号很困难,因为它是一个符号而不是文字。

||= 代表什么意思?

它是如何工作的?

5个回答

32

如果尚未赋值,则进行赋值。像这样:

a = nil
a ||= 1

a = 1
a ||= 2

在第一个示例中,a将被设置为1。在第二个示例中,a仍将保持为1。


1
有点像 SQL 的 coalesce 运算符。 - oxbow_lakes
谢谢。这只是确保当前变量的值不被覆盖。 - Marc Vitalis
这很不错。C#可以从中获得灵感。 :-) - Ashish Gupta
1
请注意,nilfalse 都是假值。因此,如果您处理的是布尔值,则无法区分“未分配”和“已分配为 false”,后面的 a ||= true 将覆盖现有的 false 值。(与 SQL 的三元逻辑 coalesce() 不同:https://www.db-fiddle.com/f/6JMNY7TLVEgTa4GdWg74Sc/0) - Beni Cherniavsky-Paskin

10

1
如果b为空,则将a赋值给它。
a = :foo
b ||= a
# b == :foo

如果 b 不是 nil,则不要更改它。
a = :foo
b = :bar
b ||= a
# b == :bar

1
这是一种“简化赋值”(见Ruby口袋参考,第10页)
a = a || b
(意味着a被分配为a,b的逻辑或运算形成的值)
变成
a ||= b
几乎所有的操作符都有一个简写版本(+= *= &&= 等)。

0

我只能猜测,但我假设它代表一个逻辑运算符与设置变量相结合(就像其他语言中的 ^=、+=、*=)

因此,x ||= y 等同于 x = x || y

编辑:我的猜测是正确的,请参见http://phrogz.net/ProgrammingRuby/language.html#table_18.4

x = x || y 的意思是:如果已设置 x,则使用 x;否则分配 y。它可用于确保变量至少被初始化(为 0、为空数组等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接