“|| =”如何运作?

可能重复:
什么|| =(或等于)在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]falsenil时,才会执行hash[:key] = :value

如果它是其他任何东西,它的值就足以确定逻辑析取的结果,并且不会计算表达式的其余部分。

这与根本不同:

 hash[:key] = hash[:key] || :value 

在这种情况下, []=方法将被调用,并且唯一的区别是它将接收哪个参数:value如果hash[:key]falsenil ,或者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’”