[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