【发布时间】:2011-07-08 08:30:53
【问题描述】:
我将粘贴一个我尝试过的简单示例,以便阅读本文的人清楚。
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 没有改变 - 那么为什么将值设置为 nil。
2) 有什么方法可以让我从哈希“h”中取回值“12”,因为上面提到的 h[[1,2,3,4]] 返回 nil。
【问题讨论】:
标签: ruby