hash = Hash.new([]) key = "test" hash[key].push( 1,22,3,4,5) print hash[key].to_s + "\n" print "------------------------------\n" print hash
结果 [1, 22, 3, 4, 5]
{}
为什么单纯的查看 hash 中没有这个值,要指定 hash[key] 才能看到结果?
默认值在第一次访问不存在的时候才插入
没插入,hash 取不到值时才会返回默认值的
1.9.3p429 :001 > a = Hash.new([]) => {} 1.9.3p429 :002 > a['asd'].push(1,2) => [1, 2] 1.9.3p429 :003 > a => {} 1.9.3p429 :006 > a['123'] => [1, 2]
要插入的话在要在 new 后面加上 block http://ruby-doc.org/core-1.9.3/Hash.html#method-c-new
hash[key].push( 1,22,3,4,5)
你这一行只是往 hash 的默认值里 push 了 5 个值,并没有对 hash 进行 set key,所以现在 hash 的默认值为 [1, 22, 3, 4, 5],对 hash 进行任意取值都会得到 [1, 22, 3, 4, 5],比如:
puts hash[999] # => [1, 22, 3, 4, 5]
你必须进行 hash[key] = value 才会将该 key set 到该 hash 中。 如果你想访问 hash 的 key,但是 key 不存在时,就对该 key 进行赋值,你应该用这种形式:
hash = Hash.new { |h, k| h[k] = [] }
#3 楼 @lifuzho thanks,我现在理解如下,对 hash 进行 set 操作之后,才能对 hash 的这个 key 进行相应的操作,否则我修改的永远是 hash 的默认值
#2 楼 @cantin thanks,理解了。
学习了,以前没用过默认值