Fehler beim Versuch, eine Klassenmethode aufzurufen: Versuchen Sie, das lokale „Selbst“ (ein Nullwert) - lua
-
28-10-2019 - |
Frage
Ich erstelle ein Lua-Skript, das auf dem Ti-N-Spire-Taschenrechner ausgeführt werden soll. Das Problem ist, dass ich beim Ausführen meines Skripts den Fehler erhalte Attempt to index local 'self' (a nil value)
wenn der button:activate()
Methode heißt. Der Parser sagt, der Fehler sei in der 8. Zeile im folgenden Code. Der problematische Code lautet wie folgt:
button = class(view)
function button:init()
self.selected = false
end
function button:activate()
self.selected = true
end
Ich nenne die Aktivitätsfunktion wie diese:
item = button()
local action = "activate"
local arguments = {}
item[action](unpack(arguments))
Ich bin mir bewusst, dass das class()
Die Funktion existiert nicht in "Stock" lua, es ist eine Funktion, die in der Ti-N-Spire-Lua-Implementierung verfügbar ist. Sie können seine Definition und Verwendung finden hier.
Lösung
obj:methodname(args)
ist Zucker für obj.methodname(obj,args)
. Wenn Sie also die Syntax verwenden möchten item[action](unpack(arguments))
, Sie müssen verwenden item[action](item,unpack(arguments))
. Ansonsten versuchen Sie es item:activate(unpack(arguments))
Wenn Sie die Methode explizit verwenden können.