Я практиковал на языке 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. Как добавить атрибуты экземпляра? Какие-нибудь советы? –
Это то, что нет различия между атрибутами «instance» и «class/static». Единственное различие заключается в том, как вы их используете. Вы должны добавить 'allFoodItemsEaten' в' Animal' напрямую, и если вы хотите установить его или обновить, скажите Animal обновить его, а не самостоятельно. – jer