Ioの言語で練習していました。ソースを見つけることはとても難しいです。あなたが知っているように、Io言語にはクラスはありません。しかし、私たちは必要なものを持ってクラスを作ることができます。とにかく、これを実行してAnimalクラスを作成できるようにしたいとしましょう。コンストラクタの作成、Io言語での属性とメソッドの追加
Animal := Class new("Animal",
withConstructor(nameParam,
name = nameParam
)
withInstanceAttribute("name", "")
withInstanceAttribute("foodItemsEaten", 0)
withStaticAttribute("allFoodItemsEaten", 0)
withMethod("feed", howMuchFood,
foodItemsEaten = foodItemsEaten + howMuchFood
class allFoodItemsEaten = allFoodItemsEaten + howMuchFood
"#{name} has just eaten #{howMuchFood} food items." interpolate println
)
withMethod("feedSummary",
"So far #{foodItemsEaten} food items eaten by #{name} and #{class allFoodItemsEaten} in total by all dogs." interpolate println
)
)
だから私は、このクラス構造を持っている:
Class := Object clone
Class new := method(name, // Meta-class constructor
cls := Class clone
cls __name := name // Name of the class
cls __instanceProto := Object clone // Prototype of instances - hold instance field along with their initial values
cls __instanceProto class := cls
call argAt(1) doInContext(cls)
cls
)
私は例えばwithConstructorメソッドを追加しようとしているが、私はさえパラメータを読み取ることができません。
Class withConstructor := method(nameParam
self
)
私は、コンストラクタでさえそれを処理できませんでした。 「クラスがnameParamに応答しません」と表示されます。構文は簡単ですが、私はまだ言語の構造を理解していないと思います。どんなアイデア、似たような情報源、それを説明できる人?
私は、この例が言語構造を理解するのに良いことを知っていました。私はそれについてもっと読んでみましょう。私はIOを本当に好きでしたが、あまりにも多くのリソースはありません。 –
さて、私はwithConstructorの部分を作成しました。インスタンス属性を追加するにはどうすればよいですか?任意のヒント? –
それは、インスタンスとクラス/静的属性の区別はありません。唯一の違いは、その使い方です。 'allFoodItemsEaten'を' Animal'に直接追加し、それを設定したり更新したりするには、Animalに、自己ではなく更新するように指示します。 – jer