Error Al intentar llamar a un método de clase: Intente indexar 'uno mismo' local (un valor nulo) - LUA
-
28-10-2019 - |
Pregunta
Estoy creando un script Lua que debería ejecutarse en la calculadora de Ti-Nspire. El problema es que mientras ejecuta mi script recibo el error Attempt to index local 'self' (a nil value)
cuando el button:activate()
se llama método. El analizador dice que el error está en la octava línea en el código a continuación. El código problemático es el siguiente:
button = class(view)
function button:init()
self.selected = false
end
function button:activate()
self.selected = true
end
Llamo a la función de activación así:
item = button()
local action = "activate"
local arguments = {}
item[action](unpack(arguments))
Soy consciente del class()
La función no existe en "stock" Lua, es una función disponible en la implementación de Ti-Nspire LUA. Puedes encontrar su definición y uso aquí.
Solución
obj:methodname(args)
es azúcar para obj.methodname(obj,args)
. Entonces, si quieres usar la sintaxis item[action](unpack(arguments))
, necesitas usar item[action](item,unpack(arguments))
. De lo contrario, intente item:activate(unpack(arguments))
Si puede usar el método explícitamente.