54 votes

Comment créer une copie profonde d'un objet en Ruby ?

J'ai fait quelques recherches et j'ai trouvé différentes méthodes et articles sur la création d'un opérateur de copie profonde.

Existe-t-il un moyen rapide et facile (intégré) de copier profondément des objets en Ruby ? Les champs ne sont pas des tableaux ou des hachages.

Travaillant en Ruby 1.9.2.

3voto

Adam Luzsi Points 31

Vous pouvez utiliser la gemme duplicate pour cela.

Il s'agit d'un petit bijou en rubis pur capable de dupliquer récursivement un objet. Il dupliquera aussi les références de ses objets vers la nouvelle duplication.

require 'duplicate'
duplicate('target object')

https://rubygems.org/gems/duplicate

https://github.com/adamluzsi/duplicate.rb

2voto

Noman Ur Rehman Points 4189

Je vous suggère d'utiliser la gemme ActiveSupport qui ajoute beaucoup de sucre à votre noyau Ruby natif, pas seulement un clone profond méthode.

Vous pouvez consulter le documentation pour plus d'informations sur les méthodes qui ont été ajoutées.

2voto

Matthew O'Riordan Points 2779

Vous n'avez vraiment pas besoin d'un Gem pour ça. Cela ne pourrait pas être beaucoup plus simple que cela, qui ne vaut pas les frais généraux d'une gemme !

def deep_clone(obj)
  obj.clone.tap do |new_obj|
    new_obj.each do |key, val|
      new_obj[key] = deep_clone(val) if val.is_a?(Hash)
    end
  end
end

1voto

flajann Points 81

Consultez également le site deep_dive. Cela vous permet de faire des copies profondes contrôlées de vos graphes d'objets.

https://rubygems.org/gems/deep_dive

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X