lua local
¿Cuál es el significado de ''intento de índice upvalue'' (2)
En este caso, parece que la base
es una función, pero está intentando indexarla como una tabla (por ejemplo, base[5]
o base.somefield
).
La parte ''upvalue'' simplemente te dice qué tipo de variable es la base
, en este caso un upvalue (también conocido como variable local externa).
Estoy dando mis primeros pasos programando en Lua y obtengo este error cuando ejecuto mi script:
attempt to index upvalue ''base'' (a function value)
Probablemente se deba a algo muy básico que no he entendido todavía, pero no puedo encontrar ninguna buena información al respecto cuando busco en Google. ¿Podría alguien explicarme qué significa?
¿Un "local" demasiados?
Como explicó Mike F , un "valor superior" es una variable local externa. Este error a menudo ocurre cuando una variable ha sido declarada local
en una declaración directa y luego declarada local
nuevamente cuando se inicializa. Esto deja la variable forward declarada con un valor de nil
. Este fragmento de código demuestra lo que no debe hacer:
local foo -- a forward declaration
local function useFoo()
print( foo.bar ) -- foo is an upvalue and this will produce the error in question
-- not only is foo.bar == nil at this point, but so is foo
end
local function f()
-- one LOCAL too many coming up...
local foo = {} -- this is a **new** foo with function scope
foo.bar = "Hi!"
-- the local foo has been initialized to a table
-- the upvalue (external local variable) foo declared above is not
-- initialized
useFoo()
end
f()
En este caso, eliminar el local
delante de foo
cuando se inicializa en f()
corrige el ejemplo, es decir,
foo = {}
foo.bar = "Hi!"
Ahora la llamada a useFoo () producirá la salida deseada
¡Hola!