2

重複の可能性:
シャベル (<<) 演算子は Ruby ハッシュでどのように機能しますか?

なぜこれが機能するのかについてのドキュメントを見つけるのに苦労しています:

1 def test_default_value_is_the_same_object
2    hash = Hash.new([])
3
4    hash[:one] << "uno"
5    hash[:two] << "dos"
6
7    assert_equal ["uno", "dos"], hash[:one]
8    assert_equal ["uno", "dos"], hash[:two]
9    assert_equal ["uno", "dos"], hash[:three]
10
11   assert_equal true, hash[:one].object_id == hash[:two].object_id
12 end

「uno」が hash[:one] キーに割り当てられ、hash[:two] が「dos」を受け取ると思っていたでしょう。テストに合格するように修正しましたが、なぜこのように動作するのかわかりません。誰かが私が欠けているものを指摘したり、この特定の側面に関する関連ドキュメントに誘導したりできますか? ありがとう。

4

2 に答える 2

3

:one鍵も鍵もありません:two。これらのキーのいずれかで値にアクセスしようとすると、デフォルト値、つまり配列が返されHashますHash.new([])

于 2012-05-24T15:56:26.390 に答える
0

「uno」が hash[:one] キーに割り当てられ、hash[:two] が「dos」を受け取ると思っていたでしょう。

それらは割り当てられず ( =)、 にプッシュ<<されます ( ) hash[:one]

于 2012-05-24T15:53:15.180 に答える