Ruby はこれをどのように実現しますか?
- 配列ポインタはハッシュキーですか?
- それとも、array_instance の object_id ですか?
- または、他の何か?
Ruby はこれをどのように実現しますか?
ポインターでもobject_id
. Ruby では、配列を値として扱うことができるため、同じ要素を含む 2 つの配列は同じhash
値を生成します。
ここで、見てください:
arr1 = [1, 2]
arr2 = [1, 2]
# You'll see false here
puts arr1.object_id == arr2.object_id
# You'll see true here
puts arr1.hash == arr2.hash
hash = {}
hash[arr1] = 'foo'
hash[arr2] = 'bar'
# This will output {[1, 2] => 'bar'},
# so there's only one entry in the hash
puts hash
Hash
Rubyのクラスhash
は、オブジェクトのメソッドを使用して、一意性をキーとして決定します。そのため、上記のコードでarr1
とarr2
は (キーとして) 交換可能です。
ドキュメントから:
2 つのオブジェクトのハッシュ値が同一で、2 つのオブジェクトが
eql?
互いに関連している場合、2 つのオブジェクトは同じハッシュ キーを参照します。
さて、何をしArray#eql?
ますか?
self と other が同じオブジェクトであるか、両方が同じ内容の配列である場合に true を返します (Object#eql? によると)。