Ruby 复制/克隆递归 [英] Ruby dup/clone recursively
本文介绍了Ruby 复制/克隆递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个像:
h = {'name' => 'sayuj',
'age' => 22,
'project' => {'project_name' => 'abc',
'duration' => 'prq'}}
我需要这个哈希的副本,更改不应影响原始哈希.
I need a dup of this hash, the change should not affect the original hash.
当我尝试时,
d = h.dup # or d = h.clone
d['name'] = 'sayuj1'
d['project']['duration'] = 'xyz'
p d #=> {"name"=>"sayuj1", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}
p h #=> {"name"=>"sayuj", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}
在这里您可以看到 project['duration']
在原始哈希中发生了变化,因为 project
是另一个哈希对象.
Here you can see the project['duration']
is changed in the original hash because project
is another hash object.
我希望散列被递归地duped
或cloned
.我怎样才能做到这一点?
I want the hash to be duped
or cloned
recursively. How can I achieve this?
推荐答案
这是在 Ruby 中进行深拷贝的方法
Here's how you make deep copies in Ruby
d = Marshal.load( Marshal.dump(h) )
这篇关于Ruby 复制/克隆递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文