Como remover programaticamente “informações singleton” em uma instância para torná-lo empacotador?
Eu criei um objeto que falhou ao empacotar devido a uma "definição de metaclasse singleton executada em tempo de execução" (esta descrição do que o código corrige?).
Isso é realizado pelo seguinte código:
# define class X that my use singleton class metaprogramming features
# through call of method :break_marshalling!
class X
def break_marshalling!
meta_class = class << self
self
end
meta_class.send(:define_method, :method_y) do
return
end
end
end
# prepare my instance of X now
instance_of_x = X.new
# marshalling fine here
Marshal.dump instance_of_x
# break marshalling with metprogramming features
instance_of_x.break_marshalling!
Marshal.dump instance_of_x
# fails with TypeError: singleton can't be dumped
O que posso fazer para corrigir o empacotamento de objetos? É possível "remover" os componentes singleton doclass X
do objetoinstance_of_x
?
Eu realmente preciso de um conselho sobre isso, porque alguns de nossos objetos precisam ser armazenados em cache através do mecanismo de serialização Marshal.dump. Esse código é executado no ruby-1.9.3, mas espero que se comporte de maneira semelhante no ruby-2.0 ou ruby-2.1