Reglas de visibilidad
Lua es un lenguaje de ámbito léxico. El ámbito de las variables comienza en la primera sentencia después de su declaración y dura hasta el final del bloque más interno que incluye la declaración.
x = 10 -- global variable
do -- new block
local x = x -- new 'x', with value 10
print(x) --> 10
x = x+1
do -- another block
local x = x+1 -- another 'x'
print(x) --> 12
end
print(x) --> 11
end
print(x) --> 10 (the global one)
Fíjate que, en una declaración como ' local x = x, la nueva ' x que se está declarando aún no está en ámbito, por lo que la segunda ' x hace referencia a la variable exterior.
Debido a las reglas de ámbito léxico, las funciones definidas dentro de su ámbito pueden acceder libremente a las variables locales. Una variable local utilizada por una función interna se denomina upvalue, o variable local externa, dentro de la función interna.
a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
endEl bucle crea diez cierres (es decir, diez instancias de la función anónima). Cada uno de estos cierres utiliza una variable " y " diferente, mientras que todos comparten la misma variable " x