Hi Vincent, thanks for your quick answer. 

This is the default behavior of adoptInstance: which calls
primitiveChangeClassTo: 

But i specifically want to gain new inst vars, which does not work that
way. 

I can't add an instvar to the superclass since i don't want to change my
system. 

Steven. 

Le 2017-06-07 15:09, Blondeau Vincent a écrit :

> Hi, 
> 
> You should be able to do it using the method primitiveChangeClassTo: but it 
> not recommended to do it. Are you sure that it is the only way to resolve 
> your problem? 
> 
> If you really want to, an example: 
> 
> Object subclass: #Toto 
> 
> slots: { #tata } 
> 
> classVariables: {  } 
> 
> category: 'Temp'. 
> 
> Toto subclass: #Titi 
> 
> slots: {  } 
> 
> classVariables: {  } 
> 
> category: 'Temp'. 
> 
> obj := Toto new. 
> 
> obj primitiveChangeClassTo: Titi new. 
> 
> obj has a new class. 
> 
> However, you cannot add a new instance variable this way but you keep the 
> values of the instance. 
> 
> But nothing avoid you to add an empty instance variable in a superclass that 
> only the subclass will use. 
> 
> I hope that it will help you 
> 
> Vincent 
> 
> DE : Pharo-users [mailto:[email protected]] DE LA PART DE 
> Steven Costiou
> ENVOYÉ : mercredi 7 juin 2017 14:54
> À : Pharo users users
> OBJET : [Pharo-users] How to migrate an object to a subclass of its class but 
> with new inst vars ? 
> 
> Hi, 
> 
> i'm trying to migrate an object from a given class A to a subclass of A with 
> new inst vars. Can't get it to work. 
> 
> I have a class and an instance of it, say: 
> 
> Object subclass: #A
> instanceVariableNames: '' 
> 
> |a| 
> 
> a := A new. 
> 
> A has no instance variables. Now i create a subclass B of A with a new inst 
> var: 
> 
> A subclass: #B
> instanceVariableNames: 'x' 
> 
> I want to do the following: 
> 
> B adoptInstance: a 
> 
> It does'nt work, for what i understand it is because the format of the 
> classes are different (B has an inst var and A has not). 
> 
> How can i make the a object become an instance of B (subclass of a's class), 
> making a acquiring the new inst var x (and in more complex cases keeping its 
> own previous inst vars) ? 
> 
> Steven. 
> !!!*************************************************************************************
> "Ce message et les pièces jointes sont confidentiels et réservés à l'usage 
> exclusif de ses destinataires. Il peut également être protégé par le secret 
> professionnel. Si vous recevez ce message par erreur, merci d'en avertir 
> immédiatement l'expéditeur et de le détruire. L'intégrité du message ne 
> pouvant être assurée sur Internet, la responsabilité de Worldline ne pourra 
> être recherchée quant au contenu de ce message. Bien que les meilleurs 
> efforts soient faits pour maintenir cette transmission exempte de tout virus, 
> l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne 
> saurait être recherchée pour tout dommage résultant d'un virus transmis.
> 
> This e-mail and the documents attached are confidential and intended solely 
> for the addressee; it may also be privileged. If you receive this e-mail in 
> error, please notify the sender immediately and destroy it. As its integrity 
> cannot be secured on the Internet, the Worldline liability cannot be 
> triggered for the message content. Although the sender endeavours to maintain 
> a computer virus-free network, the sender does not warrant that this 
> transmission is virus-free and will not be liable for any damages resulting 
> from any virus transmitted.!!!"

-- 
kloum.io 

Reply via email to