“|| =”如何运作?
可能重复:
什么|| =(或等于)在Ruby中意味着什么?
我正在学习Ruby,并对下面的代码感到困惑。 我能理解它的作用,但无法理解这是如何工作的。
h = Hash.new h['key1'] ||= 'value1' => "value1" ph => {"key1"=>"value1"}
给出Hash
:
hash = {}
这个表达式:
hash[:key] ||= :value
扩展到:
hash[:key] || hash[:key] = :value
Ruby的逻辑运算符短路 ,这意味着只有当hash[:key]
为false
或nil
时,才会执行hash[:key] = :value
。
如果它是其他任何东西,它的值就足以确定逻辑析取的结果,并且不会计算表达式的其余部分。
这与根本不同:
hash[:key] = hash[:key] || :value
在这种情况下, []=
方法将被调用,并且唯一的区别是它将接收哪个参数:value
如果hash[:key]
是false
或nil
,或者hash[:key]
本身的值除此以外。
它是一个缩写的赋值伪操作符 。 其中有11个; 最常见的是:
x += y #expands to x = x+y
||=
以同样的方式:
x ||= y expands to x = x||y
它适用于+, – , /,%,* ,&&,||,&,|,^,<<,>>。
Hash.new
的默认值为nil
所以h['key1'] ||= 'value1'
作用是“if key =’key1’还没有相应的值,让值为’value1’”