Variabili

Le variabili sono luoghi che memorizzano valori. In Lua esistono tre tipi di variabili: variabili globali, variabili locali e campi di tabella.

Un singolo nome può indicare una variabile globale o una variabile locale (o il parametro formale di una funzione, che è un tipo particolare di variabile locale):
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.

Le parentesi quadre vengono utilizzate per indicizzare una tabella:
var ::= prefixexp `[´ exp `]´
La sintassi '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)