Error Al intentar llamar a un método de clase: Intente indexar 'uno mismo' local (un valor nulo) - LUA

StackOverflow https://stackoverflow.com/questions/7353035

  •  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í.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top