2009-06-19 21 views
1

Ron JeffriesがDiscovering Better Code: Bowling for Smalltalk Seriesを使って(Squeakを使用して)行っていたので、thirdの記事を通過できませんでした。配列でオブジェクトを初期化する

コンストラクタの引数として配列をとる新しいクラス(Frameという)が作成されています。

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

Frame>>setRolls: anArray 
    rolls := anArray 

私は簡単なテストでこれを実行しようとすると:

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

私は#NEWメッセージを変更する必要がありますどのようにすべき:

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

は、私は次のエラーを取得します配列を持つFrameオブジェクトを初期化できますか?

答えて

3

新しいメソッドをフレームクラスに正しく追加できなかったと思います。インスタンス側(フレーム)ではなくクラス側(Frameクラス)に配置してもよろしいですか?これを行うには、メソッドnewを追加する前に、[クラス]ボタンをクリックします。

0

あなたは実際にはnew:を上書きしたくありません。 new:は伝統的に「この整数サイズのアイテムを作成する」ために予約されており、あなたが爆発していることは驚きではありません。

希望するコンストラクタのより一般的な名前はfromArray:、おそらくfromCollection:で、これはおそらく望み通りに機能しました。