下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
下面的代码在Ruby中是什么意思?
||=
它的语法有什么意义或原因吗?
当前回答
A ||= b
表示如果'a'中存在任何值并且您不想更改它,则继续使用该值,否则如果'a'没有任何值,则使用'b'的值。
简单的话,如果左手边不为空,则指向现有的值,否则指向右边的值。
其他回答
||=是一个条件赋值运算符
x ||= y
等于
x = x || y
或者
if defined?(x) and x
x = x
else
x = y
end
简洁完整的回答
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 ||= 1 这将检查x是否为nil。如果x确实为nil,那么它就会赋给它一个新值(在我们的例子中是1)
更明确的表示: 如果x == nil X = 1 结束