当前位置 : 主页 > 编程语言 > ruby >

ruby – 哈希默认值是具有相同默认值的哈希

来源:互联网 收集:自由互联 发布时间:2021-06-23
像这样设置哈希的默认值: hash = Hash.new { |hsh, key| hsh[key] = {} } 将为未知密钥创建(并分配)新哈希,但对于创建的哈希的未知密钥将返回nil: hash[:unkown_key] #= {}hash[:unkown_key][:nested_unknown]
像这样设置哈希的默认值:

hash = Hash.new { |hsh, key| hsh[key] = {} }

将为未知密钥创建(并分配)新哈希,但对于创建的哈希的未知密钥将返回nil:

hash[:unkown_key] #=> {}
hash[:unkown_key][:nested_unknown] #=> nil

我可以让它适用于第二级,如下所示:

hash = Hash.new do |hsh, key|
  hsh[key] = Hash.new { |nest_hsh, nest_key| nest_hsh[nest_key] = {} }
end

但是,它在第​​三级不起作用:

hash[:unkown_key][:nested_unknown] #=> {}
hash[:unkown_key][:nested_unknown][:third_level] #=> nil

如何让它在任意级别工作?

hash[:unkown_key][:nested_unknown][:third_level][...][:nth_level] #=> {}
思维弯曲,但你可以将哈希的 default_proc传递给内部哈希:

hash = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }

hash[:foo] #=> {}
hash[:foo][:bar] #=> {}
hash[:foo][:bar][:baz] #=> {}

hash #=> {:foo=>{:bar=>{:baz=>{}}}}
网友评论