J'ai un objet d'instance nommé couches qui est un tableau d'objets de calque.Copie d'un objet de classe
J'essayez ce qui suit, et je reçois une erreur disant que je suis en train de vider une méthode de classe:
@best_copy = Marshal.load(Marshal.dump(@layers))
TypeError: no marshal_dump is defined for class Method
Comment puis-je faire pour qu'il ne tente pas de sauver le attr_accessor, mais l'objet réel?
Ah ouais .. Je viens de réaliser .. J'ai un pointeur de fonction. attr_accessor: fptr. Y a-t-il une alternative à cela? En plus de supprimer le pointeur de fonction ou d'enregistrer des parties individuelles de l'objet. – Flethuseo
@ user487980: Il n'y a pas d'alternative dans le cas général - vous ne pouvez pas marshaler les méthodes. Les objets avec du code exécutable dans une variable d'instance n'interagissent pas bien avec les bibliothèques d'archivage standard. L'approximation la plus proche serait un système ressemblant à Cocoa pour stocker une cible (l'objet qui implémente la méthode) et un sélecteur (le message pour invoquer la méthode). Ainsi, par exemple, si vous faites '@fptr = foo.method (: bar)', vous feriez plutôt '@target = foo; @selector =: bar'. – Chuck