Errore durante il tentativo di chiamare un metodo di classe: tentare di indicizzare "self" locale (un valore nullo) - lua
-
28-10-2019 - |
Domanda
Sto creando uno script LUA che dovrebbe essere eseguito sul calcolatore Ti-NSpire. Il problema è che durante l'esecuzione del mio script ricevo l'errore Attempt to index local 'self' (a nil value)
quando il button:activate()
il metodo è chiamato. Il parser afferma che l'errore è nell'ottava riga nel codice seguente. Il codice problematico è il seguente:
button = class(view)
function button:init()
self.selected = false
end
function button:activate()
self.selected = true
end
Chiamo la funzione di attivazione come questa:
item = button()
local action = "activate"
local arguments = {}
item[action](unpack(arguments))
Sono a conoscenza del class()
La funzione non esiste in "Stock" Lua, è una funzione disponibile nell'implementazione di TI-NSPIRE LUA. Puoi trovare la sua definizione e uso qui.
Soluzione
obj:methodname(args)
è zucchero per obj.methodname(obj,args)
. Quindi, se vuoi usare la sintassi item[action](unpack(arguments))
, devi usare item[action](item,unpack(arguments))
. Altrimenti, prova item:activate(unpack(arguments))
Se puoi usare il metodo esplicitamente.