ruby - 使用嵌套散列和散列作为默认值未按预期工作

标签 ruby hash

<分区>

我想理解为什么下面的aa[:a]调用后是一个空hash,不为空:

a = Hash.new({a:1}) # => {}
a[:a][:a] += 1      # => 2
a                   # => {}
a[:a]               # => {:a=>2}

我知道 {a: 1} 在每个不存在的 key (a[:something_inexistent]) 之间共享。但是为什么不显示为a的key呢?如果可能,使用 Ruby 的内部将不胜感激。

最佳答案

这是因为 a[:a] 从未被赋值。当您执行 a[:a] 时,它不会返回存储的值,而是返回默认值。

与此不同,当您拥有:

a = Hash.new{|h, k| h[k] = {a: 1}}

然后,每当调用缺少的键时,都会执行 block ,将值分配给键,a 将不再是空哈希。

关于ruby - 使用嵌套散列和散列作为默认值未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005073/

相关文章:

ruby-on-rails - 如何在 Ruby 中将 JSON 对象附加在一起

linux - 命令 'md5sum' 最后没有 '-' token

ruby - Mandrill - 不存在具有 id 的消息

ruby-on-rails - Ruby:变量范围问题

javascript - ExecJS::RuntimeError Rails 4 使用react-rails gem

ruby - 通过根据项目的属性对对象数组进行分组来构建哈希

c - 跟踪 Mhash 文件(散列)

c++ unordered_map 冲突处理、调整大小和重新散列

java - 通过soap发送哈希值

ruby-on-rails - 如何使类\对象在rails中全局可用?