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=>{}}}} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |