我正在学习Ruby并且对以下代码感到困惑。我能理解它的作用,但无法理解这是如何工作的。
h = Hash.new
h['key1'] ||= 'value1'
=> "value1"
p h
=> {"key1"=>"value1"}
答案 0 :(得分:0)
给出Hash
:
hash = {}
这个表达式:
hash[:key] ||= :value
扩展为:
hash[:key] || hash[:key] = :value
Ruby的逻辑运算符short circuit,这意味着hash[:key] = :value
仅在hash[:key]
为false
或nil
的情况下执行。< / p>
如果它是其他任何东西,它的值就足以确定logical disjunction的结果,并且不会评估表达式的其余部分。
这基本不同于:
hash[:key] = hash[:key] || :value
在这种情况下,[]=
方法将以任一方式调用,唯一的区别是它将收到哪个参数::value
如果hash[:key]
是false
或nil
,或hash[:key]
本身的价值。
答案 1 :(得分:-1)
这是缩写的赋值伪操作符。其中有11个;最常见的是:
x += y #expands to x = x+y
||=
也是这样:
x ||= y expands to x = x||y
适用于+, - ,,/,%,* ,&amp;&amp;,||,&amp;,|,^,&lt;&lt;,&gt;&gt;。< / p>
答案 2 :(得分:-2)
Hash.new
中的默认值为nil
所以h['key1'] ||= 'value1'
就像
“如果key ='key1'还没有相应的值,则将值设为'value1'”