运算符 ||= 在 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。
【讨论】:
看起来有点像 SQLcoalesce
运算符
谢谢。 . .它只是确保变量的当前值没有被覆盖。
这很好。 C# 可以从中获得灵感。 :-)
请注意nil
和false
都是假的。因此,如果您使用的值是布尔值,它不会区分“未分配”和“分配给假”,稍后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 ||= y
与x = x || y
相同
编辑:我猜对了,见http://phrogz.net/ProgrammingRuby/language.html#table_18.4
x = x || y
表示:如果设置则使用 x,否则分配 y。它可用于确保变量至少已初始化(为 0、为空数组等)
【讨论】:
以上是关于运算符 ||= 在 Ruby 中代表啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章