运算符 ||= 在 Ruby 中代表啥? [复制]

Posted

技术标签:

【中文标题】运算符 ||= 在 Ruby 中代表啥? [复制]【英文标题】:What does the operator ||= stand for in Ruby? [duplicate]运算符 ||= 在 Ruby 中代表什么? [复制] 【发布时间】:2010-11-26 05:18:41 【问题描述】:

可能重复:What does ||= (or equals) mean in Ruby?

在 Google 中很难搜索到它,因为它是一个符号,而不是文本。

||= 代表什么?

它是如何工作的?

【问题讨论】:

【参考方案1】:

如果尚未分配,它会分配一个值。像这样:

a = nil
a ||= 1

a = 1
a ||= 2

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

【讨论】:

看起来有点像 SQL coalesce 运算符 谢谢。 . .它只是确保变量的当前值没有被覆盖。 这很好。 C# 可以从中获得灵感。 :-) 请注意nilfalse 都是假的。因此,如果您使用的值是布尔值,它不会区分“未分配”和“分配给假”,稍后a ||= true 将覆盖现有的false 值。 (不同于 SQL coalesce() 三元逻辑:db-fiddle.com/f/6JMNY7TLVEgTa4GdWg74Sc/0)【参考方案2】:

来自问题Common Ruby Idioms:

等价于

 if a == nil || a == false   
    a = b 
 end

【讨论】:

【参考方案3】:

如果 b 为 nil,则将 a 赋值给它。

a = :foo
b ||= a
# b == :foo

如果 b 不为零,则不要更改它。

a = :foo
b = :bar
b ||= a
# b == :bar

【讨论】:

【参考方案4】:

这是一个“缩写作业”(参见 Ruby Pocket Reference,第 10 页)

a = a ||

(意思是a被赋值为a,b的逻辑或形成的值

变成

a ||= b

几乎所有运算符都有缩写版本(+= *= &&= 等)。

【讨论】:

【参考方案5】:

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

所以x ||= yx = x || y 相同

编辑:我猜对了,见http://phrogz.net/ProgrammingRuby/language.html#table_18.4

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

【讨论】:

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

运算符 ^ 在 java 中代表啥? [复制]

Ruby问号运算符,这是啥意思? [复制]

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

在 ruby​​ on rails 中,感叹号后面是啥意思? [复制]

Ruby 中的 *(星号)是啥意思? [复制]

有啥作用!意味着在 Ruby 方法定义的末尾? [复制]