私はちょうどそれがこれを読んでいる人には明らかになるように、私が試した簡単な例を下に貼り付けられます。ルビー:ハッシュのプロパティキー
irb(main):001:0> h = { }
=> {}
irb(main):002:0> a=[1,2,3]
=> [1, 2, 3]
irb(main):003:0> a.object_id
=> 69922343540500
irb(main):004:0> h[a] = 12 #Hash with the array as a key
=> 12
irb(main):005:0> a << 4 #Modified the array
=> [1, 2, 3, 4]
irb(main):006:0> a.object_id #Object id obviously remains the same.
=> 69922343540500
irb(main):007:0> h[a] #Hash with the same object_id now returns nil.
=> nil
irb(main):008:0> h #Modified hash
=> {[1, 2, 3, 4]=>12}
irb(main):009:0> h[[1,2,3,4]] #Tried to access the value with the modified key -
=> nil
irb(main):011:0> h.each { |key,value| puts "#{key.inspect} maps #{value}" }
[1, 2, 3, 4] maps 12
=> {[1, 2, 3, 4]=>12}
ハッシュを繰り返し実行すると、キーと値の間のマップを識別できます。
いくつかのいずれかが私にルビーのハッシュのこの動作を説明してくださいとハッシュキーのプロパティがどのようなものでした。
1)iは、上述のように、OBJECT_IDは変更されていない - なぜゼロに設定された値です。 Hは[1,2,3,4]戻すゼロ上述したようので、私はハッシュ「H」から値「12」を取り戻すことができるように
2)は、任意の可能な方法があります。