加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:43:14 所属栏目:百科 来源:网络整理
导读:像这样设置哈希的默认值: hash = Hash.new { |hsh,key| hsh[key] = {} } 将为未知密钥创建(并分配)新哈希,但对于创建的哈希的未知密钥将返回nil: hash[:unkown_key] #= {}hash[:unkown_key][:nested_unknown] #= nil 我可以让它适用于第二级,如下所示: ha
像这样设置哈希的默认值:

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=>{}}}}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读