tengo un hash como:Rubí DUP/clon de forma recursiva
h = {'name' => 'sayuj',
'age' => 22,
'project' => {'project_name' => 'abc',
'duration' => 'prq'}}
Necesito un DUP de este hash, el cambio no debe afectar a la original Hash.
Cuando intento,
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}
Aquí se puede ver la project['duration']
se cambia en el hash original porque project
es otro objeto hash.
Quiero que el hash sea duped
o cloned
recursivamente. ¿Cómo puedo conseguir esto?
Esto crea copias completas de todos los objetos referenciados por 'h'. Esto podría ser exactamente lo que necesita Sayuj para simples hash de cadenas. Con objetos más complejos, esto podría no ser deseado más. Una vez podría anular el método 'Hash # dup' para duplicar todos los hash en' values' recursivamente. Pero eso necesitaría extenderse para cada tipo de objeto. –
@HolgerJust: sí, es por eso que se llama una "copia profunda" :-) –
Por supuesto. Solo quería mencionar que podría hacer más de lo que el OP pretendía (aunque probablemente esté bien) :) Así que es solo para, bueno, referencia futura. –