我有一个哈希像:

h = {'name' => 'sayuj',
     'age' => 22,
     'project' => {'project_name' => 'abc',
                   'duration' => 'prq'}}

我需要此哈希的dup,更改不应影响原始哈希。

当我尝试
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是另一个哈希对象。

我希望哈希递归地是dupedcloned。我该如何实现?

最佳答案

这是您在Ruby中制作深拷贝的方法

d = Marshal.load( Marshal.dump(h) )

关于ruby - 递归Ruby dup/clone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8710642/

10-14 17:22