2016-11-20 4 views
1

anrufen Ich bin verloren auf, was ich hier falsch mache.Lua Versuch, Methode einen Nullwert

Ich habe diesen einfachen Code:

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) 

Wenn diese Ausführung erhalte ich „Versuch-Methode‚Push-Back‘zu nennen (ein Null-Wert) Allerdings, wenn ich die Push-Back-Funktion wie folgt ändern und nennen Sie es entsprechend. es funktioniert:

function Queue.PushBack(q, item) 
end 

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

der Code ausgeführt wird, und führt richtig verstehe ich. ":" syntaktischer Zucker ist, so scheint es mir, dass

function Queue:PushBack(item) 

wäre genau das gleiche wie

Queue.PushBack(q, item) 

Aber es stirbt auf mich. Hat es damit zu tun, wie ich das Objekt erstelle? Ich bin ziemlich verloren und ich kann nicht herausfinden, was genau falsch ist.

Antwort

3

Die nil bedeutet, dass die PushBack-Funktion nicht im ersten Fall gefunden wird.

Der Grund Code nicht funktioniert, ist, weil Sie versehentlich __Index falsch geschrieben haben, wie es sein sollte:

Queue.__index = Queue 

mit i von __index Klein zu sein.

Sobald korrigiert, sollte Ihr Code funktionieren.

Verwandte Themen