저는 루아를 처음 접했고 수업 시스템을 작동 시키려고합니다. 내가하고 싶은 것은 속성의 무리가있는 기본 클래스가 다음과 같은 기본 클래스 속성을해야합니다루아 계승 대체 기능
등 버튼, 텍스트 상자 등의 개체에 대해이 클래스를 확장 할을 수행하는 등 x
, y
, width
, height
등등 다른 클래스는 다음과 같이 말합니다 : label
또는 colour
또는 이와 유사합니다.
기본 클래스에 render()와 같은 함수를 만들고이 함수를 나중에 재정의하려고하면 작동하지 않는 것 같습니다. 나는 Button.create("TestBtn"):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()
할이 I'm the base! : TestBtn
를 인쇄하지만 I'm a button! : TestBtn
를 인쇄하는 것입니다 (! 아마도 내가 완전히 잘못 클래스를 사용하고 있습니다) 여기
누군가가 원래의 render
기능을이 새로운 기능으로 대체하는 데 도움이 될 수 있습니까?
감사합니다.
'Button .__ index = Base'가 틀립니다. Base'__ index = Base'와 어떻게 같은지 주목하십시오. –
@Etan 좋습니다. 상속이 그 마술을 어떻게했는지 생각했습니다. 그래서 내가 무엇을 놓치고 잘못 했는가? –
글쎄, 나는 약간 갑작스럽게 생각했다. 'Button '을'Base'에 연결하는 것은 맞습니다. 문제는'Button' 자체를'__index'로 사용하지 않는다는 것입니다. 내가 믿는'Button.create'에서'setmetatable (b, {__index = Button})'을 할 필요가 있습니다. 미안합니다. –