Я довольно новичок в Lua, и я пытаюсь заставить классную систему работать. То, что я хотел бы сделать это, чтобы иметь базовый класс, который имеет кучу свойств, а затем расширить этот класс для объектов, таких как кнопки, текстовые поля и т.д.Функция переопределения наследования Lua
Базовый класс будет иметь свойства, такие как x
, y
, width
, height
и т. Д., А затем другие классы будут иметь, скажем, label
или colour
или аналогичные.
Если я создаю функцию, такую как render() в базовом классе, и позже попытаюсь переопределить эту функцию, она не работает. (! Предположительно, я использую классы совершенно неправильно)
Вот репродукция вниз пример того, что я использую:
Base = {}
Base.__index = Base
function Base.create(value)
local b = {}
setmetatable(b, Base)
b.value = value
return b
end
function Base:render()
print("I'm the base! : "..self.value)
end
Button = {}
Button.__index = Base
function Button.create(value)
local b = Base.create(value)
setmetatable(b, Button)
return b
end
function Button:render()
print("I'm a button! : "..self.value)
end
Button.create("TestBtn"):render()
Что я хотел бы сделать, это Button.create("TestBtn"):render()
для печати I'm a button! : TestBtn
однако он печатает I'm the base! : TestBtn
.
Может ли кто-нибудь помочь мне переопределить функцию render
с этим новым?
Спасибо, воля.
'Button .__ index = Base' неверен. Обратите внимание, что это то же самое, что и «Base .__ index = Base» –
@Etan Okay. Я подумал, что именно так наследовала магия. Итак, что мне не хватает или что-то не так? –
Ну, я думаю, что я был немного крут. Это верно для привязки кнопки «Button» к «Base». Проблема в том, что вы не используете 'Button' себя как' __index' ни на чем. Вам нужно 'setmetatable (b, {__index = Button})' в 'Button.create', я считаю. Извини за это. –