Ruby 复制/克隆递归 [英] Ruby dup/clone recursively

查看:21
本文介绍了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.

我希望散列被递归地dupedcloned.我怎样才能做到这一点?

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆