[Squeak-fr] Egalité de chaîne

Damien Cassou damien.cassou at laposte.net
Ven 3 Sep 17:40:00 CEST 2004


>> Chapitre 5 -> Notations littérales pour la définition de données -> 
>> Caractères et chaînes de caractères (page 88)
>>
>> "'Je ne suis pas unique' == 'Je ne suis pas unique' rend false."
>>
>> Or, le test depuis Squeak rend true. Alors que si on stocke d'abord la 
>> chaîne dans une variable puis qu'on teste l'égalité avec une constante 
>> chaîne, ça renvoie false :
>>
>> 'je ne suis pas unique'=='je ne suis pas unique'. true
>> toto := 'je ne suis pas unique'.
>> toto == 'je ne suis pas unique'. false
>> Je pense que le deuxième résultat est tout à fait logique. On 
>> construit d'abord l'objet toto, puis un objet chaîne de caractère et 
>> on teste les deux pointeurs. Il est normal qu'ils soient différents.
>>
>> Par contre, le résultat du premier test qui renvoie true me paraît un 
>> peu bizarre. J'aurai pensé que Squeak créait 2 chaînes de caractères 
>> différentes (avec le même contenu mais à 2 emplacements distincts) et 
>> donc que le test de pointeur devrait retourner false. Or, 
>> contrairement à ce que dit le livre, ce test renvoie true.
>>
>> Est-ce que quelqu'un peut m'expliquer ? Est-ce un bug de Squeak ou du 
>> livre ?
>>
 > je pense que c'est un bug du livre car Squeak est different de VW.
 >
 > en visualWorks on a
 >
 > 'aa' == 'aa' false
 > |toto|
 > toto := 'jlkj'.
 > toto == toto. "true"
 > toto == 'jlkj' false
 >
 > Dans Squeak, le compileur doit mettre la chaine dasn le literal frame de
 > la methode et n'en alloue pas une seconde.
 > alors qu'en VW deux strings sont allouees. Maintenant il faut que tu
 > fais rarement
 >
 > 'aa' == 'aa'
 > mais plutot
 > tu passes par arguments de methodes donc tu es plus dans la situation
 > normale.
 >
 > Stef
 >

Merci pour la précision, j'ajoute le bug dans l'erratum du bouquin.


Plus d'informations sur la liste de diffusion Squeak-fr