我想理解为什么a
在调用a[:a]
之后是一个空哈希,这不是空的:
a = Hash.new({a:1}) # => {}
a[:a][:a] += 1 # => 2
a # => {}
a[:a] # => {:a=>2}
我知道{a: 1}
在每个不存在的密钥(a[:something_inexistent]
)之间共享。但为什么它不显示为a
的关键字?如果可能的话,使用Ruby的内部将非常感激。
答案 0 :(得分:5)
这是因为永远不会分配a[:a]
。执行a[:a]
时,它不会返回存储的值,而是返回默认值。
与此不同的是,当你改为:
a = Hash.new{|h, k| h[k] = {a: 1}}
然后,每当调用一个丢失的键时,就会执行该块,该值将该值赋给该键,a
将不再是空哈希。