2009-06-19 13 views
1

Ich ging (mit Squeak) die Discovering Better Code: Bowling for Smalltalk Series von Ron Jeffries und ich kann nicht durch den third Artikel gehen.Initialisiere ein Objekt mit einem Array

Eine neue Klasse (Frame genannt) wird erstellt, die ein Array als Argument im Konstruktor verwendet.

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

Frame>>setRolls: anArray 
    rolls := anArray 

Wenn ich versuche, dies in einem einfachen Test auszuführen:

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

bekomme ich folgende Fehlermeldung:

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

Wie soll ich die #new Nachricht ändern sein Kann Frame-Objekt mit einem Array initialisieren?

Antwort

3

Ich schätze, Sie haben die Methode neu hinzugefügt: korrekt zur Frame-Klasse. Sind Sie sicher, dass Sie es auf der Klassenseite (Frame-Klasse) und nicht auf der Instanzseite (Frame) platzieren? Um dies zu tun, klicken Sie auf die Schaltfläche "Klasse", bevor Sie die Methode new: hinzufügen.

0

Sie wollen wirklich nicht new: hier überschreiben. new: ist traditionell reserviert für "Erstelle ein Element dieser Integer-Größe", und es überrascht mich nicht, dass es dich in die Luft jagt.

Ein traditionellerer Name für die Art von Konstruktor, die Sie wollen, ist fromArray:, oder vielleicht sogar fromCollection:, die wahrscheinlich wie gewünscht funktioniert haben würde.