Regole di visibilità
Lua è un linguaggio a scope lessicale. L'ambito delle variabili inizia dalla prima istruzione dopo la loro dichiarazione e dura fino alla fine del blocco più interno che include la dichiarazione.
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)
Si noti che, in una dichiarazione come 'local x = x, il nuovo 'x che viene dichiarato non è ancora nello scope e quindi il secondo 'x si riferisce alla variabile esterna.
Grazie alle regole di scoping lessicale, le variabili locali possono essere liberamente accessibili dalle funzioni definite all'interno del loro ambito. Una variabile locale utilizzata da una funzione interna è chiamata upvalue, o variabile locale esterna, all'interno della funzione interna.
a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
endIl ciclo crea dieci chiusure (cioè dieci istanze della funzione anonima). Ciascuna di queste chiusure utilizza una variabile 'y diversa, mentre tutte condividono la stessa 'x