Le problème des littéraux en Squeak

Dans une discussion initiée par Damien Cassou sur la liste squeak-dev, le problème de copie des littéraux a été soulevé.
Par exemple, si on tape dans un workspace, le code suivant :

‘foo’ = ‘foo’. “On obtient true”
‘foo’ == “foo’. “On obtient également true …”

En fait, le compilateur optimise l’utilisation des littéraux comme les chaînes de caractères, on ne créant qu’un litéral pour les deux chaînes.

Dans la même discussion, Roel Wuyts donne des exemples supplémentaires. Si on créé deux méthodes de la même classe A :

foo
^’foo’
foo2
^’foo’

Et que maintenant si on exécute le code :

A new foo == A new foo. “true ?”
A new foo == A new foo2. “false”

Un peu ennuyeux !

J’étais tombé exactement sur ce genre de problème lors d’une de toute première séance au Dojo XP, où on avait utilisé Smalltalk et où à la fin du Dojo aucun des trois tests ne passait … (Bon exercice, trouver l’erreur dans le code publié en ligne. Vous pouvez mettre la réponse en commentaire ci-dessous). Je n’avais pas pensé immédiatement au problème de la copie de littéraux . Un peu ennuyant lorsque vous utilisez Smalltalk avec des débutants. La solution la plus simple est d’utiliser le message copy chaque fois que l’on utilise un littéral.

WordPress database error: [Table 'doesnotunderstand.wp_comments' doesn't exist]
SELECT * FROM wp_comments WHERE comment_post_ID = '161' AND comment_approved = '1' ORDER BY comment_date

Comments are closed.