下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
当前回答
一个常见的误解是,||= b并不等同于a = a || b,但它的行为就像|| a = b。
但这里有一个棘手的情况。如果a未定义,则|| a = 42将引发NameError,而||= 42将返回42。所以,它们似乎不是等价的表达式。
其他回答
X ||= y表示
如果x有任何值,不要改变它的值,否则 将x设为y
||=是一个条件赋值运算符
x ||= y
等于
x = x || y
或者
if defined?(x) and x
x = x
else
x = y
end
这就像延迟实例化。 如果变量已经定义,它将获取该值,而不是重新创建该值。
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定义的,而不是一开始就不执行赋值。
ruby-lang语法。正确的答案是查看ruby-lang文档。所有其他解释都令人困惑。
谷歌
"ruby-lang文档缩写赋值"。
Ruby-lang文档
https://docs.ruby-lang.org/en/2.4.0/syntax/assignment_rdoc.html#label-Abbreviated+Assignment