Lua ООП конспект
Пригодится для создания больших плагинов в Cheat Engine. Более ~500 строк
Наследование
Скрытый текст
ClassX = {}
function ClassX:New(_argument1, _argument2)
local obj = {}
obj.argument1 = _argument1
obj.argument2 = _argument2
-- Через "self"
function obj:GetValue1() return obj.argument1 end
function obj:GetValue2() return obj.argument2 end
setmetatable(obj, self)
obj.__index = ClassX
return obj
end
someObject = ClassX:New("A", "B")
print(someObject.GetValue1())
print(someObject.GetValue2())
Woman = {}
--наследуемся
setmetatable(Woman ,{__index = ClassX})
--проверяем
masha = Woman:New("Марья","Ивановна")
print(masha:GetValue1()) --->результат: Марья
Инкапсуляция
Скрытый текст
Person = {}
function Person:new(name)
--приватное свойство
local private = {}
private.age = 18
local obj = {}
--публичное свойство
obj.name = name or "Вася" -- "Вася" - это значение по умолчанию
function obj:getAge() return private.age end
setmetatable(obj,self)
self.__index = self
return obj
end
vasya = Person:new()
print(vasya.name) --> результат: Вася
print(vasya.age) --> результат: nil
print(vasya:getAge()) --> результат: 18
Полиморфизм
Скрытый текст
Person = {}
function Person:New(name)
local private = {}
private.age = 18
local obj = {}
obj.name = name or "Вася"
-- Защищенный от переорпеделения
function obj:GetName() return "Person protected "..self.name end
-- Переопределяемый
function Person:GetName2() return "Person "..self.name end
setmetatable(obj, self)
self.__index = self
return obj
end
--создадим класс, унаследованный от Person
Woman = {}
setmetatable(Woman,{__index = Person})
function Woman:GetName() return "Woman protected "..self.name end
function Woman:GetName2() return "Woman "..self.name end
--проверим
masha = Woman:New()
print(masha:GetName()) --> Person protected Вася
print(masha:GetName2()) --> Woman Вася
Спасибо автору за исходники.
1 Комментарий
Рекомендуемые комментарии
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти