ruby 1.91 的bug?? 真奇怪

irb(main):001:0> g=Hash.new([])
=> {}
irb(main):002:0> g['a'] << 1
=> [1]
irb(main):003:0> g.size
=> 0

这不是bug,是你使用的方法不对。1.8里也是这样的。
g = Hash.new([])会在给g传入一个不存在的key时返回默认value [].
你g['a'] << 1这句话只是把g["a"]返回的结果([])里加入了一个1,对g这个哈希没有任何改变。当然g.size会是1了。

如果你想要在key不存在时设置他的默认值可以这样搞:
[code="ruby"]

class Hash
def _fetch(key)
fetch(key) rescue self[key]=self[key]
end
end

a = Hash.new([])
a._fetch("a") << 1
p a #{"a"=>[1]}

[/code]

你应该用:
[code="ruby"]Hash.new{|h, k| h[k] = []}[/code]

呃呃呃。。。