2016-11-02 5 views
1

OOP를 작동 시키려고 노력하고 몇 가지 문제가 발생하여 모든 것이 끝나지 만 루아와 함께 어지럽 혀 있지만 아무 것도 놓치거나 예기치 않은 문제가 있는지 알고 싶습니다. 이 메소드를 사용하여 oop를 구현하십시오. 기본적으로내 Lua OOP 구현

나는 기본 클래스

local BaseClass = {} 
function BaseClass.new() 
    local self = setmetatable({}, BaseClass) 
    return self 
end 

그리고

local ChildClass = {} 
function ChildClass.new() 
    local self = BaseClass.new() 
    return self 
end 

가 다시 말하지만, 모든 작품의 ChildClass에 기본 클래스의 모든 멤버를 상속하는 자식 클래스를 가지고 있고, 나의 이해 방법에 기본적으로 루아의 변수이기 때문에 그것들을 상속 받아 childclass에 특정 멤버를 추가하고 호출 할 수 있습니다. 그래서 더 좋을 수도 있지만 비교적 가볍습니다. 예상치 못한 문제가 발생하거나 여분의 작업을 수행하는 경우 알려 주시기 바랍니다.

+0

무엇이 문제인지 명확하지 않습니다. 코드 검토를 원하면 [여기] (https://codereview.stackexchange.com/)로 게시하십시오. –

+0

귀하의 방법이 잘못되었습니다 : ChildClass의 인스턴스는 ChildClass 테이블에있는 메소드를 볼 수 없지만 BaseClass 테이블의 메소드를 볼 수 있습니다. –

답변

1

체인이 끊어졌습니다. ChildClass.new에서 반환 된 테이블은 ChildClass 테이블과 연결되지 않습니다.

Chapter 16 of Programming in Lua을 살펴보고 객체 지향 프로그래밍을 구현하는 일반적인 방법에 대해 설명합니다.

체인을 유지하려면 암시적인 self: 설명자를 사용해야합니다. ChildClass 생성자를 수동으로 정의 할 필요는 없으며 BaseClass의 인스턴스를 인스턴스으로 상속하도록합니다.

local BaseClass = {} 

function BaseClass:new() 
    self.__index = self 
    return setmetatable({}, self) 
end 

local ChildClass = BaseClass:new() 

이제 ChildClass 인스턴스에 대한 공유 기능을 정의 할 수 있습니다.

function ChildClass:foo() 
    print('foo!') 
end 

local child_inst = ChildClass:new() 
child_inst:foo()