2009-06-19 7 views
1

Je passais (en utilisant Squeak) le Discovering Better Code: Bowling for Smalltalk Series par Ron Jeffries et je ne peux pas passer à travers l'article third.Initialiser un objet avec un tableau

Une nouvelle classe (appelée Frame) est en cours de création qui prend un tableau en tant qu'argument dans le constructeur.

Frame class>>new: anArray 
    ^self new setRolls: anArray 

Frame>>setRolls: anArray 
    rolls := anArray 

Lorsque je tente de lancer cela dans un test simple:

testFrame 
    | frame rolls | 
    rolls := Array with: 5 with: 4. 
    frame := Frame new: rolls. 

je reçois l'erreur suivante:

alt text http://files.getdropbox.com/u/120566/junk/error.png

Comment dois-je modifier le message #new être capable d'initialiser l'objet Frame avec un tableau?

Répondre

3

Je suppose que vous n'avez pas réussi à ajouter la méthode new: correctement à la classe Frame. Êtes-vous sûr de l'avoir placé du côté de la classe (classe Frame) et non du côté de l'instance (Frame)? Pour ce faire, cliquez sur le bouton 'class', avant d'ajouter votre méthode new:

0

Vous ne voulez vraiment pas remplacer new: ici. new: est traditionnellement réservé à "Créer un objet de cette taille entière", et cela ne me surprend pas que ça vienne à bout de vous.

Un nom plus traditionnel pour le type de constructeur que vous voulez est fromArray:, ou peut-être même fromCollection: qui aurait probablement fonctionné comme vous le souhaitiez.

Questions connexes