控制台输出:
2.1.3 :011 > b = Hash.new( Hash.new([]) )
=> {}
2.1.3 :012 > b[:a][:b] << 'hello'
=> ["hello"]
2.1.3 :013 > b
=> {}
2.1.3 :014 > b.size
=> 0
2.1.3 :015 > b.keys
=> []
2.1.3 :016 > b[:a][:b]
=> ["hello"]
为什么我可以访问存储在b[:a][:b]
但b
大小为0并且没有键的值?
如果
obj
指定,则此单个对象将用于所有默认值。
现在Hash.new([])
正在保存默认Array
对象。现在,b[:a][:b] << 'hello'
您输入的"hello"
是默认值Array
。当键中不存在该键时,将返回默认值。Hash
不要以为您将密钥添加到哈希对象 b[:a][:b] << 'hello' line.
b[:a]
提供默认Hash
对象Hash.new([])
。现在,Hash
您可以Hash#[]
使用key调用此对象:b
,但是:b
与不存在的键一样,它也提供了默认Array
对象。
这就是为什么b
,b.size
和b.keys
所有被证明Hash
是空的。
最后。
为什么我可以访问存储在b [:a] [:b]中的值,但是b的大小为0并且没有键?
因为,如上所述,您将值添加"Hello"
到default Array
。当您使用线路时,该值即将到来b[:a][:b]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句