重複の可能性:
RubyメソッドArray#<<ハッシュで配列を更新しない
Hash.new([])を使用する場合の奇妙なrubyの動作
私は素晴らしいKoansをやっています、そして私が進むにつれて私は大きな問題を見つけません、しかし私はこれに遭遇しました、そしてそれから何の意味もありません:
def test_default_value_is_the_same_object
hash = Hash.new([])
hash[:one] << "uno"
hash[:two] << "dos"
assert_equal ["uno", "dos"], hash[:one] # But I only put "uno" for this key!
assert_equal ["uno", "dos"], hash[:two] # But I only put "dos" for this key!
assert_equal ["uno", "dos"], hash[:three] # I didn't shove anything for :three!
assert_equal true, hash[:one].object_id == hash[:two].object_id
end
すべてのテストに合格しています(書き込みに適切なアサーションを推測するのに役立つエラーを確認しました)。
最後のアサーション、わかりました。どちらも初期化されていないため、両方ともデフォルトを使用するため、値は同じオブジェクトIDを持つ必要があります。
デフォルト値が変更された理由がわかりません。それが何が起こったのか完全にはわかりません。
IRBで試してみましたが、ハッシュ/配列を改ざんして気が狂ったのではないかと思いましたが、同じ結果が得られました。
私は最初になるhash[:one] << "uno"
ことを意味すると思いましたが、それは残っています。呼び出しだけ
だと思いますが、新しいキーはサインを使用した場合にのみ追加されますhash
{ one: ["uno] }
{ }
<<
push
=
見逃したことを教えてください。
編集:私はRuby1.9.3を使用しています