кнопка, слайдер и тд. Есть также некоторый общий код, который может использоваться в каждом из классов. Мне хочется наследовать методы в производных классах. Пока придумал такой вариант. Норм так делать?
local Object = {}
Object.__index = Object
function Object:new(num)
local o = { n = num }
setmetatable(o, Object)
return o
end
function Object:action()
print("Object:action", self.n)
end
local Button = {}
function Button:new(num)
local o = { n = num }
setmetatable(o, self)
self.__index = function(self, key)
return Button[key] or Object[key]
end
return o
end
function Button:zoom()
print("Button:zoom()", self.n)
end
local o = Object:new(100)
o:action()
local b = Button:new(10)
b:zoom()
b:action()
Вместо self.__index = function(...) end — проще повесить метатаблицу с __index на саму Button. Быстрее работать будет, базарю, инфа сотка. Типа local Button = setmetatable({}, {__index = Object}) или даже local Button = setmetatable({}, Object), если методы не перегружены и Object прописан в себе самом как __index. Оно умеет ходить по цепочке индексов.
Обсуждают сегодня