我只會貼上一個簡單的例子,我試過了,這樣對讀者來說就很清楚了。紅寶石:哈希鍵的屬性
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}
現在,當我遍歷散列,它可能識別鍵和值之間的映射。
有人可以解釋我這ruby哈希的行爲和什麼是散列鍵的屬性。
1)正如我上面提到的,object_id沒有改變 - 那麼爲什麼值設置爲零。
2)是否有任何可能的方式,以便我可以從哈希'h'取回值'12',因爲上面提到的h [[1,2,3,4]]返回nil。