2

最近、配列をハッシュキーとして使用できることを知りました

Ruby はこれをどのように実現しますか?

  • 配列ポインタはハッシュキーですか?
  • それとも、array_instance の object_id ですか?
  • または、他の何か?
4

2 に答える 2

5

ポインターでも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

HashRubyのクラスhashは、オブジェクトのメソッドを使用して、一意性をキーとして決定します。そのため、上記のコードでarr1arr2は (キーとして) 交換可能です。

于 2013-09-20T22:06:27.873 に答える
2

ドキュメントから:

2 つのオブジェクトのハッシュ値が同一で、2 つのオブジェクトがeql?互いに関連している場合、2 つのオブジェクトは同じハッシュ キーを参照します。

さて、何をしArray#eql?ますか?

self と other が同じオブジェクトであるか、両方が同じ内容の配列である場合に true を返します (Object#eql? によると)。

于 2013-09-20T22:06:19.960 に答える