2016-11-20 5 views
1

私はここで間違っています。Luaはメソッドをゼロ値で呼び出そうとしています

私はこの単純なコードがあります。

Queue = {} 
Queue.__Index = Queue 

function Queue.Create() 
    local obj = {} 
    setmetatable(obj, Queue) 
    return obj 
end 

function Queue:PushBack(item) 
end 

q = Queue.Create() 
print(q) 
q:PushBack(1) 

これを実行すると、私はこのようにプッシュバック機能を変更し、それに応じてそれを呼び出す場合、私は、「しかし、メソッドを呼び出そうと 『プッシュバック』(ゼロ値)を取得します。 。私がいることを理解

function Queue.PushBack(q, item) 
end 

q = Queue.Create() 
print(q) 
Queue.PushBack(q, 1) 

コードが実行され、正しく実行「:」それは動作しますシンタックスシュガーであり、それは私には思えるので、その

function Queue:PushBack(item) 

Queue.PushBack(q, item) 

とまったく同じになります。しかし、それは私に死にます。オブジェクトの作成方法と関係がありますか?私はこれでかなり失われており、正確に何が間違っているのか分からないようです。

答えて

3

nilは、最初のケースでPushBack関数が見つからないことを示します。 __indexi

Queue.__index = Queue 

が小文字であること:それはあるべきなあなたが意図せず__Indexつづりの間違ったので

あなたのコードが動作しない理由は、あります。

修正されると、コードが機能するはずです。

関連する問題