Пятница, 24.01.2025, 11:22
| RSS
F.O.R.U.M.
Главная | Создание своего класса - Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Создание своего класса
frontДата: Вторник, 13.10.2009, 16:26 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 152
Репутация: 229
Статус: Оффлайн
Свой класс можно добавить так:
Код
class "my_cool_class"
Здесь "my_cool_class" - имя моего нового класса. Записывается в кавычках, т.е. это строка.

Потом можно добавлять к этому классу свои методы:

Код
-- это специальный метод - конструктор. Будет вызван при создании класса.
function my_cool_class:__init(num)
self.my_param = num -- добавили в свой класс переменную
end

-- обычный метод
function my_cool_class:cool_method_of_my_class()
get_console():execute("lua_bind_in_action_"..self.my_param)
end

-- деструктор, вызывается при сборке объекта сборщиком мусора. Аргументов не имеет (кроме скрытого self. об этом см. далее)
function my_cool_class:__finalize()
get_console():execute("good_by_"..self.my_param)
end

Потом можно создавать экземпляры своего класса, вызывать их методы и пр.:
Код
local obj1 = my_cool_class(1) -- здесь создаётся новый объект. При этом вызывается конструктор и ему передаются аргументы этого вызова (в данном случае число 1).
local obj2 = my_cool_class(4)
obj1:cool_method_of_my_class()
obj2:cool_method_of_my_class()

Как только объект становится ненужным (т.е. на него больше нет ссылок) он удаляется сборщиком мусора. При этом вызывается его метод __finalize

При чём здесь self.
self - это скрытый первый аргумент. Конструкция вида:
Код
function class_name:fun_name(<список аргументов>)
end
на самом деле эквивалентна конструкции
Код
function class_name.fun_name(self, <список аргументов>)
end
Обратите внимание на двоеточие в первом случае и точку во втором.
При вызове метода конструкция вида:
object_name:fun_name(<список аргументов>)
эквивалентна конструкции
object_name.fun_name(object_name, <список аргументов>)
Это означает, что в качестве self как правило передаётся сам же объект. "Как правило" - это потому, что можно в принципе передать что-то другое. Но лучше этого соглашения не нарушать.

Всё это здорово, но какая от этого польза? Ну сделал я свой класс, и что с ним делать?

В общем, классы - это неплохое средство организации своего кода. Владеющие объектно-ориентированным подходом найдут это расширение весьма удобным. В частности такие, ни к чему не привязанные классы, в скриптах сталкера используются в некоторых местах. Однако, настоящая сила этой технологии не в этом. С помощью этой технологии можно расширять классы, экспортированные в Lua со стороны движка игры. Об этом пойдет речь в следующей части.


 
  • Страница 1 из 1
  • 1
Поиск:

Для добавления необходима авторизация

Copyright Front Сайт оптимизирован под браузер Opera © 2025