Пишу мурзилку для будущего скриптера. Буду выкладывать кусками здесь, на проветриться.
Если есть замечания - буду рад бесплатным советам. Ну, если че.
Мардонг объекта, подход 1
object = {}function object:say() print(self.value.."i Love You!") endfunction object:create(val) local instance = {} instance.value = val setmetatable(instance,self) self.__index = self return instanceend-- прмер использованияfoo = object:create("вася") -- конструированиеbar = object:create("таня") -- конструированиеfoo:say() -- использование метода объектаbar:say() -- использование метода объектаfunction foo:addin_method() -- добавление собственного метода в наш объект print (self.value.." hello from add-in method!" )endfunction foo:add_mixin() -- Mix-In хук self.old_say = self.say self.say = function() print("hello from mix-in!") old_say() endend |
- Создаем объект object - то есть пустую таблицу с именем object
- Пишем метод обекта к примеру - say() - то есть добавляем в таблицу поле-функцию say, которая использует поле-член value.
- Добавляем конструктор (точнее фабрику) объекта object - то есть добавляем в таблицу функцию-член create, которая инициализирует поле член value
Конструктор :
- Создаем локальную таблицу членов экземпляра нашего класса, содержащую члены экземпляра класса, в нашем случае это одна переменная value
- Инициализируем ее параметром конструктора, если нам нужен конструктор с параметром, либо значением по умолчанию
- Устанавливаем локальную таблицу членов экземпляра метатаблицей нашего класса
- Говорим, что при отсутствии элемента в таблице экземпляра, надо искать в таблице класса
- Возврашаем таблицу 'эекземпляра instance
С точки зрения ООП языков проще воспринимать все члены таблицы object., как статические члены нашего класса, а таблицы instance - как члены экземпляра класса.
Получение экземпляра: вызов конструктора возвращает таблицу экземпляра класса.
Добавление метода в класс : добавление метода в таблицу object
Добавление члена в класс : добавление члена в таблицу instance в конструкторе (точнее фабрики, конечно)
Добавление метода в экземпляр : просто добавление метода в таблицу экземпляра
MixIn : Хук существующего метода c заменой реализации метода класса своей, с сохранением и вызовом оригинального метода.
Комментариев нет:
Отправить комментарий