重複の可能性:
Ruby で ||= (または等号) とはどういう意味ですか?
私はRubyを学んでいて、次のコードで混乱しました。私はそれが何をするのか理解できますが、これがどのように機能するのか正確には理解できません。
h = Hash.new
h['key1'] ||= 'value1'
=> "value1"
p h
=> {"key1"=>"value1"}
重複の可能性:
Ruby で ||= (または等号) とはどういう意味ですか?
私はRubyを学んでいて、次のコードで混乱しました。私はそれが何をするのか理解できますが、これがどのように機能するのか正確には理解できません。
h = Hash.new
h['key1'] ||= 'value1'
=> "value1"
p h
=> {"key1"=>"value1"}
与えられたHash
:
hash = {}
この式:
hash[:key] ||= :value
次のように展開します。
hash[:key] || hash[:key] = :value
Ruby の論理演算子はshort circuitです。つまり、 は または のいずれかである場合hash[:key] = :value
にのみ実行されます。hash[:key]
false
nil
それ以外の場合、その値だけで論理和の結果を判断するのに十分であり、残りの式は評価されません。
これは、次のものとは根本的に異なります。
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'
、「key='key1' に対応する値がまだない場合は、値を 'value1' にします」のように機能します。