Initialisieren eines Objekts mit einem Array
Frage
Ich wollte durch (mit Squeak) Discovering Bessere Code: Bowling for Smalltalk Series von Ron Jeffries und ich kann noreferrer"> dritten Artikel rel="nofollow nicht bekommen die
Eine neue Klasse (genannt Rahmen) wird geschaffen, das eine Anordnung als ein Argument in dem Konstruktor. Wenn ich versuche, dies in einem einfachen Test auszuführen: Ich erhalte den folgenden Fehler: alt text http://files.getdropbox.com/u/120566 /junk/error.png Wie soll ich die #new Nachricht ändern zu können Frame-Objekt mit einem Array initialisieren? Frame class>>new: anArray
^self new setRolls: anArray
Frame>>setRolls: anArray
rolls := anArray
testFrame
| frame rolls |
rolls := Array with: 5 with: 4.
frame := Frame new: rolls.
Lösung
Ich denke, die Methode neu failed hinzufügen: richtig Klasse Rahmen. Sind Sie sicher, dass Sie es auf der Klassenseite (Frame-Klasse) setzen und nicht auf der Instanz Seite (Frame)? Um das zu machen, klicken Sie auf der ‚Klasse‘ Taste, bevor Ihr Verfahren neu hinzugefügt.
Andere Tipps
Sie wollen wirklich nicht new:
hier außer Kraft zu setzen. new:
wird traditionell reserviert für „Schaffen Sie ein Element dieser ganzen Zahl Größe“, und es überrascht mich nicht, dass es auf Sie bläst nach oben.
Ein traditioneller Name für die Art von Konstruktor Sie wollen, ist fromArray:
, oder vielleicht sogar fromCollection:
die wahrscheinlich gearbeitet haben würde, wie man wollte.