Ho un hash come:Rubino DUP/clone ricorsivamente
h = {'name' => 'sayuj',
'age' => 22,
'project' => {'project_name' => 'abc',
'duration' => 'prq'}}
ho bisogno di un duplicato di questo hash, il cambiamento non dovrebbe pregiudicare l'hash originale.
Quando provo,
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}
Qui potete vedere la project['duration']
è cambiato nel hash originale perché project
è un altro oggetto hash.
Desidero che l'hash sia duped
o cloned
in modo ricorsivo. Come posso raggiungere questo obiettivo?
Questo crea copie complete di tutti gli oggetti referenziati da 'h'. Questo potrebbe essere esattamente ciò che serve Sayuj per semplici hash di stringa. Con oggetti più complessi, questo potrebbe non essere più desiderato. Una volta è possibile sovrascrivere il metodo 'Hash # dup' per duplicare ricorsivamente tutti gli hash in' values'. Ma questo dovrebbe essere esteso per ogni tipo di oggetto. –
@HolgerJust: sì, è per questo che si chiama "deep copy" :-) –
Ovviamente. Volevo solo dire che potrebbe fare più di quanto l'OP intendesse (anche se probabilmente è proprio bello) :) Quindi è solo per, beh, riferimento futuro. –