J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
--- Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire
et Toto maman retourne quoi ? parce que je crois que c'est plutot ca que tu veux faire si tu fais une variable de classe, non ?
et maman, c'est declaré en methode de classe ou en metohde d'instance ?
et le initialize doit aussi etre une methode de classe pour que ca fonctionne.
enfin, c'est ce que je crois...
Simon
Hilaire Fernandes a écrit :
J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire
Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Le mer 23/02/2005 à 00:39, Simon Le Gloannec a écrit :
et Toto maman retourne quoi ? parce que je crois que c'est plutot ca que tu veux faire si tu fais une variable de classe, non ?
Non, je veux y accèder depuis une instance de classe Toto
et maman, c'est declaré en methode de classe ou en metohde d'instance ?
En méthode d'instance, elle accède à la variable de class Maman
et le initialize doit aussi etre une methode de classe pour que ca fonctionne.
Oui (Toto>>initialize)
Hilaire
enfin, c'est ce que je crois...
Simon
Hilaire Fernandes a écrit :
J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire
Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Le 23 févr. 05, à 09:41, Hilaire Fernandes a écrit :
Le mer 23/02/2005 à 00:39, Simon Le Gloannec a écrit :
et Toto maman retourne quoi ? parce que je crois que c'est plutot ca que tu veux faire si tu fais une variable de classe, non ?
Non, je veux y accèder depuis une instance de classe Toto
Tu définis une méthode de classe :
Toto class>>maman ^Mama
et tu y accède depuis n'importe quel endroit par : Toto maman. Si tu veux initialiser la variable de classe :
Toto class>>initialize Mama := 'Maman de Toto'
Puis tu initialize la variable de classe avant de construire des instances :
Toto initialize.
Le initialize est également appellé lorsque tu charge la classe dans l'image.
A+ -- oooo Dr. Serge Stinckwich OOOOOOOO Université de Caen>CNRS UMR 6072>GREYC>MAD OOESUGOO http://purl.org/net/SergeStinckwich oooooo Smalltalkers do: [:it | All with: Class, (And love: it)] \ / ##
En réponse à Serge Stinckwich Serge.Stinckwich@info.unicaen.fr:
Toto initialize.
Le initialize est également appellé lorsque tu charge la classe dans l'image.
Effectivement si j'appelle le initialize à la mano les variables de classe sont bien initialisées. D'après ce que j'ai compris c'est normalement fait lors de la création de la classe. La question c'est à quel moment ?
Si par exemple après avoir fait un Toto initialize, je décide de modifier la méthode de classe initialize pour initialiser Maman avec une autre valeur, toto maman retourne toujours l'ancienne valeur.
Hilaire
Je comprends pas tout... et je sais pas si c'est correct mais en faisant une methode d'affectation dans la classe Toto Maman: aMaman ca marche apres avoir fais un seul Toto initialize
|toto| toto := Toto new. Toto initialize. (toto maman: 'mam de toto ) Toto Maman: 'gertrude'. toto maman >> 'gertrude'
je comprends pas ... tu veux changer initialize directement ??
Effectivement si j'appelle le initialize à la mano les variables de classe sont bien initialisées. D'après ce que j'ai compris c'est normalement fait lors de la création de la classe. La question c'est à quel moment ?
justement non apparement. Le new reserve juste la place en memoire.... mais n'affecte pas (c'est bien ca ?)
ps: suis pas un expert ;) lol
Si par exemple après avoir fait un Toto initialize, je décide de modifier la méthode de classe initialize pour initialiser Maman avec une autre valeur, toto maman retourne toujours l'ancienne valeur.
Cédrick
Le 23 févr. 05, à 10:20, hilaire a écrit :
En réponse à Serge Stinckwich Serge.Stinckwich@info.unicaen.fr:
Toto initialize.
Le initialize est également appellé lorsque tu charge la classe dans l'image.
Effectivement si j'appelle le initialize à la mano les variables de classe sont bien initialisées. D'après ce que j'ai compris c'est normalement fait lors de la création de la classe. La question c'est à quel moment ?
Lorsque tu charge la classe dans ton image, l'initialisation est effectuée. Par exemple, lorsque tu charge un .st ou un changeset.
Si par exemple après avoir fait un Toto initialize, je décide de modifier la méthode de classe initialize pour initialiser Maman avec une autre valeur, toto maman retourne toujours l'ancienne valeur.
Il faut alors que tu rappelle Toto initialize.
-- oooo Dr. Serge Stinckwich OOOOOOOO Université de Caen>CNRS UMR 6072>GREYC>MAD OOESUGOO http://purl.org/net/SergeStinckwich oooooo Smalltalkers do: [:it | All with: Class, (And love: it)] \ / ##
Je me demandais... (n'hésitez pas à commenter, j apprends)
si tu redéfinis new dans Toto
new
self initialize. ^super new.
ca force l'initilisation à chaque fois... (peut être pas utile? mais ca évite d'avoir a initilaiser à la main en cas de changement de la méthode initialize)
|tot| tot:=Toto new. tot maman retourne la derniere valeur contenue dans l'initialize...
cédrick cbeler@enit.fr
Etrange car cela devrait marcher
Stef
On 22 févr. 05, at 23:43, Hilaire Fernandes wrote:
J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire _______________________________________________ Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Ca marche chez moi
On 22 févr. 05, at 23:43, Hilaire Fernandes wrote:
J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire _______________________________________________ Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Salut
ton code m'avait l'air correct (sauf que c tu réinitialize une variable de classe ds l'initialisation de l'instance mais tu as tes raisons ... ;-) ... c du test i suppose). aussi j'ai essayé parcuriosité et ca foncitonne bien avec une 3.8? (sauf qu'il y a une faute de frappe c'est 'toto maman' et pas 'toto mamam')
j'ai bien 'Toto de Maman' et pas ,nil.
sinon, normalement pas besoin de faire initialize, c'est fait ds Behavior>>new tu peux le voir en mettant self halt ds ta méthode initialize.
"Hilaire Fernandes" hilaire@ext.cri74.org a écrit dans le message de news: 421BB5A2.8050304@ext.cri74.org...
J'ai remarque un comportement non conforme par rapport `a la doc sur l' initialisation des classes et les variables de classe, l' exemple ci dessous ne produit pas le r'esultat attendu:
Object subclass: #Toto instanceVariableNames: '' classVariableNames: 'Mama' poolDictionaries: '' category: 'PeriodicTable-Model'
Toto>>initialize Mama := 'Maman de Toto'
maman ^Mama
--
ensuite:
toto := Toto new toto mamam
devrait retourner 'Maman de Toto' Au lieu cela retourne nil
Hilaire
--------------------------------------------------------------------------------
_______________________________________________ Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
squeak-fr@lists.squeakfoundation.org