質問

(Squeakを使用して) Smalltalkシリーズのより良いコードの発見 Ron Jeffriesと私は third の記事を通過できません。

>

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

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.

次のエラーが表示されます:

代替テキストhttp://files.getdropbox.com/u/120566 /junk/error.png

Frameオブジェクトを配列で初期化できるように#newメッセージを変更するにはどうすればよいですか

役に立ちましたか?

解決

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

他のヒント

ここで new:をオーバーライドするのは本当に望ましくありません。 new:は伝統的に「この整数サイズのアイテムを作成する」ために予約されていますが、それがあなたに吹き飛ばされていることは驚きではありません。

必要なコンストラクタの種類のより伝統的な名前は、 fromArray:、またはおそらく fromCollection:で、おそらく希望どおりに機能するでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top