0

重複の可能性:
Ruby で ||= (または等号) とはどういう意味ですか?

私はRubyを学んでいて、次のコードで混乱しました。私はそれが何をするのか理解できますが、これがどのように機能するのか正確には理解できません。

h = Hash.new
h['key1'] ||= 'value1'
=> "value1"

p h
=> {"key1"=>"value1"}
4

3 に答える 3

0

与えられたHash:

hash = {}

この式:

hash[:key] ||= :value

次のように展開します。

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

Ruby の論理演算子はshort circuitです。つまり、 は または のいずれかである場合hash[:key] = :valueにのみ実行されます。hash[:key]falsenil

それ以外の場合、その値だけで論理和の結果を判断するのに十分であり、残りの式は評価されません。

これは、次のものとは根本的に異なります。

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

この場合、[]=メソッドはどちらの方法でも呼び出されます。唯一の違いは、どちらの引数を受け取る:valuehash[:key]です。falsenilhash[:key]

于 2012-06-20T16:38:51.553 に答える
-1

これは、省略された割り当ての疑似演算子です。それらは11個あります。最も一般的なものは次のとおりです。

x += y #expands to x = x+y

||=同じように行きます:

x ||= y expands to x = x||y

+、- 、、 /、%、*、&&、||、&、|、^、<<、>>で機能します。

于 2012-06-20T16:06:36.263 に答える
-2

のデフォルト値Hash.newnil

そのためh['key1'] ||= 'value1'、「key='key1' に対応する値がまだない場合は、値を 'value1' にします」のように機能します。

于 2012-06-20T16:00:33.653 に答える