Initialiser un objet avec un tableau
Question
Je parcourais (avec Squeak) la série À la découverte d'un meilleur code: Bowling pour Smalltalk . par Ron Jeffries et je ne peux pas passer par le troisième article .
Une nouvelle classe (appelée Frame) est en cours de création. Elle prend un tableau comme argument du constructeur.
Frame class>>new: anArray
^self new setRolls: anArray
Frame>>setRolls: anArray
rolls := anArray
Lorsque j'essaie de l'exécuter dans un test simple:
testFrame
| frame rolls |
rolls := Array with: 5 with: 4.
frame := Frame new: rolls.
J'obtiens l'erreur suivante:
texte alternatif http://files.getdropbox.com/u/120566 /junk/error.png
Comment dois-je modifier le message #new pour pouvoir initialiser l'objet Frame avec un tableau?
La solution
Je suppose que vous n’avez pas réussi à ajouter la méthode new: correctement à la classe Frame. Êtes-vous sûr de le placer du côté de la classe (classe Frame) et non du côté de l'instance (Frame)? Pour ce faire, cliquez sur le bouton 'classe' avant d'ajouter votre méthode new:.
Autres conseils
Vous ne voulez vraiment pas remplacer new:
ici. new:
est traditionnellement réservé à "Créer un article de cette taille", et cela ne me surprend pas qu'il explose.
Un nom plus traditionnel pour le type de constructeur que vous souhaitez utiliser est fromArray:
, ou peut-être même fromCollection:
, qui aurait probablement fonctionné comme vous le souhaitiez.