質問
(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:
で、おそらく希望どおりに機能するでしょう。
所属していません StackOverflow