为什么是这个哈希:
test_hash = Hash.new{|hash, key|
Hash.new{|second_level_hash, second_level_key| 0 }
}
未通过以下操作更新?
test_hash[1][1] += 1
test_hash[1][1] # => 0
答案 0 :(得分:4)
你实际上并没有将值分配给哈希,你只是返回一个哈希值和一个独立的0值。这些被修改,然后扔掉。
通过执行作业来解决此问题:
test_hash = Hash.new { |h,k|
h[k] = Hash.new(0)
}
您可以告诉某些内容出错,因为在访问test_hash[1][1]
后,调用test_hash.inspect
它仍然是空的。
答案 1 :(得分:2)
tadman的答案是(中途)正确,但可能有点误导。
您正在为嵌入式哈希值分配值,但不会将嵌入式哈希分配给主哈希。每次在主哈希中调用密钥时,都会创建一个新的嵌入式哈希。为嵌入式哈希值分配值后,已成为{1 => 1}
的嵌入式哈希未分配给主哈希,并被丢弃。