2016-11-20 96 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) 

當執行這個我得到「試圖調用方法‘則PushBack’(一個零值)。但是,如果我改變推回功能,這樣並相應地調用它。它的工作原理:

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函數。

的原因,你的代碼不能正常工作,是因爲你無意中拼錯__Index因爲它應該是:

Queue.__index = Queue 

__indexi是小寫。

一旦糾正,您的代碼應該工作。

相關問題