Variablen

Werte werden in Variablen gespeichert. In Lua gibt es drei Arten von Variablen: globale Variablen, lokale Variablen und Tabellenfelder.

Ein einzelner Name kann eine globale Variable oder eine lokale Variable bezeichnen (oder den formalen Parameter einer Funktion, bei dem es sich um eine Art lokale Variable handelt):
var ::= Name

Der Name bezeichnet die Identifikatoren.

Es wird davon ausgegangen, dass jede Variable global ist, sofern sie nicht ausdrücklich als lokal deklariert ist. Lokale Variablen sind lexikalisch skaliert: Auf lokale Variablen können Funktionen, die innerhalb ihres Geltungsbereichs definiert sind, frei zugreifen.

Bevor die erste Zuweisung für eine Variable erfolgt, ist ihr Wert null.

Zum Indexieren einer Tabelle werden eckige Klammern verwendet:
var ::= prefixexp `[´ exp `]´
Die Syntax var.Name ist lediglich syntaktischer Zucker für var["Name"]:
var ::= prefixexp `.´ Name

Alle globalen Variablen sind als Felder in normalen Lua-Tabellen vorhanden, die als Umgebungstabellen oder einfach Umgebungen bezeichnet werden. Jede Funktion hat ihren eigenen Verweis auf eine Umgebung, so dass alle globalen Variablen in dieser Funktion auf diese Umgebungstabelle verweisen. Wenn eine Funktion erstellt wird, übernimmt sie die Umgebung aus der Funktion, von der sie erstellt wurde. Zum Abrufen der Umgebungstabelle einer Lua-Funktion rufen Sie 'getfenv' auf. Um sie zu ersetzen, rufen Sie 'setfenv' auf.

Ein Zugriff auf eine globale Variable x ist äquivalent zu _env.x; dabei ist _env die Umgebung der aktiven Funktion. (Auf die Variable _env kann in Lua nicht zugegriffen werden. Sie wird hier nur zu Erläuterungszwecken verwendet.)