Variabili
Le variabili sono luoghi che memorizzano valori. In Lua esistono tre tipi di variabili: variabili globali, variabili locali e campi di tabella.
var ::= Name
Il nome indica gli identificatori.
Ogni variabile viene assunta come globale, a meno che non sia esplicitamente dichiarata come locale. Le variabili locali hanno uno scope lessicale: le variabili locali possono essere liberamente accessibili dalle funzioni definite all'interno del loro scope.
Prima della prima assegnazione a una variabile, il suo valore è nullo.
var ::= prefixexp `[´ exp `]´
var.Name è solo uno zucchero sintattico per 'var["Name"]:var ::= prefixexp `.´ Name
Tutte le variabili globali vivono come campi nelle normali tabelle di Lua, chiamate tabelle di ambiente o semplicemente ambienti. Ogni funzione ha un proprio riferimento a un ambiente, in modo che tutte le variabili globali di questa funzione facciano riferimento a questa tabella di ambienti. Quando una funzione viene creata, eredita l'ambiente dalla funzione che l'ha creata. Per ottenere la tabella degli ambienti di una funzione Lua, si chiama getfenv. Per sostituirlo, si chiama setfenv.
Un accesso a una variabile globale 'x è equivalente a '_env.x, dove '_env è l'ambiente della funzione in esecuzione. (La variabile '_env non è accessibile in Lua. Li usiamo qui solo a scopo esplicativo)