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

||=

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


当前回答

简洁完整的回答

a ||= b

计算方法与下面每一行相同

a || a = b
a ? a : a = b
if a then a else a = b end

-

另一方面,

a = a || b

计算方法与下面每一行相同

a = a ? a : b
if a then a = a else a = b end

-

编辑:正如AJedi32在评论中指出的那样,这只在以下情况下成立:A是一个已定义变量。2. 计算一次时间和两次时间不会导致程序或系统状态的差异。

其他回答

a ||= b

等于

a || a = b

而不是

a = a || b

因为您使用默认值定义哈希(对于任何未定义的键,哈希将返回默认值)

a = Hash.new(true) #Which is: {}

如果你使用:

a[10] ||= 10 #same as a[10] || a[10] = 10

A仍然是:

{}

但如果你这样写

a[10] = a[10] || 10

一个变成了:

{10 => true}

因为你已经在键10处赋值了它自己的值,默认为true,所以现在哈希是为键10定义的,而不是一开始就不执行赋值。

x ||= y

is

x || x = y

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

简而言之,||=b意味着:如果a是undefined、nil或false,则将b赋值给a。否则,保持a不变。

除非x X = y 结束

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

等于

X ||= y

还请记住||=不是原子操作,因此,它不是线程安全的。根据经验,不要将它用于类方法。