下面的代码在Ruby中是什么意思?

||=

它的语法有什么意义或原因吗?


当前回答

Basically,

X ||= y表示

如果x有任何值,不要改变它的值,否则 将x设为y

其他回答

这就像延迟实例化。 如果变量已经定义,它将获取该值,而不是重新创建该值。

irb(main):001:0> a = 1
=> 1
irb(main):002:0> a ||= 2
=> 1

因为a已经被设为1了

irb(main):003:0> a = nil
=> nil
irb(main):004:0> a ||= 2
=> 2

因为a是nil

除非x X = y 结束

除非x有值(不是nil或false),否则将其设为y

等于

X ||= y

这个问题在Ruby邮件列表和Ruby博客上讨论得如此频繁,以至于现在Ruby邮件列表上甚至有一些线程,它们的唯一目的就是收集到Ruby邮件列表上讨论这个问题的所有其他线程的链接。

这里有一个:||= (OR Equal)线程和页面的最终列表

如果你真的想知道发生了什么,可以看看Ruby语言规范草案的第11.4.2.3节“缩写赋值”。

作为第一近似,

a ||= b

等于

a || a = b

并不等同于

a = a || b

然而,这只是一种近似,特别是在a未定义的情况下。根据是简单的变量赋值、方法赋值还是索引赋值,语义也有所不同:

a    ||= b
a.c  ||= b
a[c] ||= b

都有不同的待遇。

x ||= y

is

x || x = y

"如果x为假或未定义,则x指向y"