[], "b"=>[], "c"=>[]} => {"a"=>[],-6ren">
gpt4 book ai didi

ruby-on-rails - 如何在空数组的散列上使用默认值?

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:06 26 4
gpt4 key购买 nike

我想在需要时使用默认值来重置我的 ary。但是我不知道如何在 ary 的值更改时不更改默认值。

> default = {"a"=>[], "b"=>[], "c"=>[]}
=> {"a"=>[], "b"=>[], "c"=>[]}

> ary = default.clone
=> {"a"=>[], "b"=>[], "c"=>[]}

> ary["a"] << "foo"
=> ["foo"]

> default
=> {"a"=>["foo"], "b"=>[], "c"=>[]}

最佳答案

您在这里发现的是 Hash#clone 仅进行浅克隆,即它仅复制自身而不复制其中引用的对象。

有许多“深度克隆”gem 可以解决这个特定问题,或者您可以编写自己的 gem 来解决它:

class Hash
def deep_clone
Hash[collect { |k,v| [ k, v.respond_to?(:deep_clone) ? v.deep_clone : v ] }]
end
end

class Array
def deep_clone
collect { |v| v.respond_to?(:deep_clone) ? v.deep_clone : v }
end
end

这将允许您根据需要克隆任意 Hash 和 Array 对象。

关于ruby-on-rails - 如何在空数组的散列上使用默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5942269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com