2016-11-02 4 views
1

私はルアを使いこなして、OOPを動作させようとしていて、いくつかの問題に遭遇しましたが、私の最後にはすべてが働いています。このメソッドを使ってoopを実装してください。基本的には私のルア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は、基本クラスからのすべてのメンバーを継承した子クラスに持っている、と私の理解の方法に基本的にはluaの変数なので、それも継承してから、特定のメンバーを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() 
関連する問題