Когда в Lua требуется создаться много одинаковых объектов и одинаково управлять ими, невольно задумаешься о классах и объектах. Вот только в Lua в явном виде нет классов и ООП как такового вообще. Но, тем не менее, реализовать некоторое подобие классов можно используя таблицы и мета-таблицы.
-- Непосредственно сам класс
SomeClass = {}
-- При создании объекта класса ему можно сразу определить какой-то атрибут
function SomeClass:new(msg)
local new_obj = {msg = msg}
self.__index = self
return setmetatable(new_obj, self)
end
-- Метод foo
function SomeClass:foo(text)
-- Можно использовать self, чтобы задать какой-то атрибут
self.text = text
end
-- Метод print_info
function SomeClass:print_info()
print(self.msg, self.text)
end
test = SomeClass:new("hello")
test:foo("world")
test:print_info() -- напечатает hello world
От созданного класса можно определить новый дочерний класс.
SomeClass = {}
function SomeClass:new(msg)
local new_obj = {msg = msg}
self.__index = self
return setmetatable(new_obj, self)
end
function SomeClass:foo(text)
self.text = text
end
function SomeClass:print_info()
print(self.msg, self.text)
end
-- Дочерний класс
SubClass = SomeClass:new(msg)
-- Метод print_end
function SubClass:print_end()
self:foo("world")
self:print_info()
print("from SubClass")
end
test = SubClass:new("hello")
test:print_end() -- напечатает hello world
-- from SubClass
Комментариев нет:
Отправить комментарий