Werte und Typen

Lua ist eine dynamisch typisierte Sprache. Dies bedeutet, dass Variablen im Gegensatz zu Werten keine Typen aufweisen. In der Sprache gibt es keine Typdefinitionen. Alle Werte haben einen eigenen Typ.

Bei allen Werten in Lua handelt es sich um Werte erster Klasse. Das bedeutet, dass alle Werte in Variablen gespeichert werden können, die als Argumente an andere Funktionen übergeben und als Ergebnisse zurückgegeben werden.

In nzLua gibt es sechs Basistypen: null, boolean, number, string, function und table.

Null ist der Typ des Werts null, dessen Haupteigenschaft darin besteht, sich von allen anderen Werten zu unterscheiden; in der Regel zeigt dieser Wert das Fehlen eines hilfreichen Werts an. Der Lua-Parser wurde für nzLua erweitert, sodass das Schlüsselwort null äquivalent zum Lua-Standardschlüsselwort nil ist. Im Gegensatz zu einem NULL-Wert in SQL entspricht null (und nil) sich selbst, deshalb gibt null == null den Wert true zurück.

Boolean ist der Typ der Werte false und true. Sowohl null als auch false geben eine Bedingung als falsch an; jeder andere Wert gibt sie als wahr an.

Number steht für reelle Zahlen (Gleitkomma mit doppelter Genauigkeit).

String stellt Zeichenarrays dar. Lua ist 8-Bit-sauber: Strings können jedes 8-Bit-Zeichen enthalten, einschließlich eingebetteter Nullen ('\0').

Der Typ table implementiert assoziative Feldgruppen, d. h. Arrays, die nicht nur mit Zahlen indexiert werden können, sondern mit einem beliebigen Wert (außer null). Tabellen können heterogen sein, also Werte aller Typen enthalten (außer null). Tabellen sind der einzige Mechanismus zur Datenstrukturierung in Lua; sie können zur Darstellung von normalen Arrays, Symboltabellen, Mengen, Datensätzen, Graphen, Bäumen usw. verwendet werden. Zu vertreten

datensätze, verwendet Lua den Feldnamen als Index. Die Sprache unterstützt diese Darstellung, indem sie " a.name als syntaktischen Zucker füra[" "name ""] bereitstellt. Es gibt mehrere bequeme Möglichkeiten, Tabellen in Lua zu erstellen.

Wie im Falle von Indizes kann auch der Wert eines Tabellenfelds einen beliebigen Wert aufweisen (außer null). Insbesondere gilt, dass Tabellenfelder Funktionen enthalten können, da es sich bei Funktionen um Werte erster Klasse handelt. So können Tabellen auch Methoden tragen.

Tabellen- und Funktionswerte sind Objekte: Variablen enthalten diese Werte nicht wirklich, nur Referenzen darauf. Bei Zuweisungen, Parameterübergaben und Funktionsrückgaben werden immer nur die Referenzen auf solche Werte bearbeitet; diese Operationen beinhalten keine Kopiervorgänge.