Lua Spickzettel
Zuletzt aktualisiert
Hello World & Code ausführen
Lua ist minimal - eine einzige Anweisung läuft.
| Operation | Syntax |
|---|---|
| Eine Zeile ausgeben | print("Hello, World!") |
| Mehrere Werte ausgeben | print("x", 1, true) |
| Ohne Zeilenumbruch schreiben | io.write("Hi") |
| Kommentar | -- this is a comment |
| Mehrzeiliger Kommentar | --[[ ... ]] |
| Strings verketten | print("Hi " .. name) |
| Eine Datei ausführen | lua app.lua |
| Interaktive Shell | lua |
Variablen & Typen
Variablen sind standardmäßig global; deklariere lokale mit local.
| Operation | Syntax |
|---|---|
| Lokale Variable | local age = 30 |
| Globale Variable | count = 0 |
| Mehrfachzuweisung | local a, b = 1, 2 |
| Die acht Typen | nil, boolean, number, string, table, function, userdata, thread |
| Nil / Booleans | nil, true, false |
| Typ prüfen | type(x) gibt "number" zurück |
| In Zahl umwandeln | tonumber("42") |
| In String umwandeln | tostring(42) |
Strings
Strings sind unveränderlich; sowohl einfache als auch doppelte Anführungszeichen funktionieren.
| Operation | Syntax |
|---|---|
| Länge | #s oder string.len(s) |
| Verketten | s1 .. s2 |
| Groß-/Kleinschreibung | s:upper(), s:lower() |
| Teilstring | s:sub(1, 3) |
| Teilstring finden | s:find("ell") |
| Ersetzen (gsub) | s:gsub("a", "b") |
| Formatieren | string.format("%05d", 42) |
| Langer String | [[ multi\nline ]] |
Tables (die zentrale Datenstruktur)
Tables sind Luas einziger strukturierter Typ - sie dienen als Arrays, Maps und Objekte.
| Operation | Syntax |
|---|---|
| Leere Table | local t = {} |
| Array-Stil (1-basiert) | local t = {10, 20, 30} |
| Auf Array-Element zugreifen | t[1] (erstes Element) |
| Table im Map-Stil | local u = {name = "Ada", age = 30} |
| Auf Map-Wert zugreifen | u.name oder u["name"] |
| Einen Wert setzen | t[4] = 40, u.email = "a@x.com" |
| Länge des Array-Teils | #t |
| Array durchlaufen (ipairs) | for i, v in ipairs(t) do ... end |
| Alle Schlüssel durchlaufen (pairs) | for k, v in pairs(u) do ... end |
| Verschachtelte Table | local m = {a = {1, 2}} |
Kontrollfluss
Blöcke schließen mit end; nur nil und false sind falsy.
| Operation | Syntax |
|---|---|
| If / elseif / else | if x > 0 then ... elseif x < 0 then ... else ... end |
| Logische Operatoren | and, or, not |
| Numerisches for | for i = 1, 10 do ... end |
| For mit Schrittweite | for i = 10, 1, -1 do ... end |
| While-Schleife | while x < 100 do ... end |
| Repeat-until | repeat ... until done |
| Break | break |
| Ungleich-Operator | if a ~= b then ... end |
Funktionen
Funktionen sind Werte erster Klasse und können mehrere Ergebnisse zurückgeben.
| Operation | Syntax |
|---|---|
| Eine Funktion definieren | function add(a, b) return a + b end |
| Lokale Funktion | local function square(x) return x * x end |
| Anonyme Funktion | local f = function(x) return x * 2 end |
| Mehrere Rückgabewerte | function bounds() return 1, 10 end |
| Mehrere Rückgaben erfassen | local lo, hi = bounds() |
| Variadische Funktion | function sum(...) ... end |
| Varargs sammeln | local args = {...} |
| Methode (Doppelpunkt-Syntax) | function obj:greet() ... end |
String-Bibliothek
Gängige Funktionen aus der String-Bibliothek (aufrufbar als s:fn()).
| Funktion | Was sie macht |
|---|---|
string.len(s) | Länge des Strings |
string.sub(s, i, j) | Teilstring von Index i bis j |
string.upper(s) | Kopie in Großbuchstaben |
string.rep(s, n) | Wiederholt den String n-mal |
string.find(s, p) | Findet ein Muster, gibt Anfang/Ende zurück |
string.match(s, p) | Gibt den ersten Mustertreffer zurück |
string.gsub(s, p, r) | Ersetzt alle Mustertreffer |
string.format(fmt, ...) | Formatiert Werte zu einem String |
Table- & Math-Bibliotheken
Helfer für die Arbeit mit Tables im Array-Stil und mit Zahlen.
| Funktion | Was sie macht |
|---|---|
table.insert(t, v) | Hängt einen Wert am Ende an |
table.insert(t, i, v) | Fügt v an Position i ein |
table.remove(t, i) | Entfernt das Element an i und gibt es zurück |
table.concat(t, ", ") | Fügt Elemente zu einem String zusammen |
table.sort(t) | Sortiert das Array an Ort und Stelle |
math.floor(x) / math.ceil(x) | Ab- / aufrunden |
math.max(...) / math.min(...) | Größtes / kleinstes Argument |
math.random(1, 6) | Zufällige Ganzzahl in einem Bereich |
Metatables (kurz)
Metatables erlauben dir, das Verhalten von Tables anzupassen - Operatoren, Indizierung und mehr.
| Operation | Syntax |
|---|---|
| Eine Metatable setzen | setmetatable(t, mt) |
| Eine Metatable holen | getmetatable(t) |
| Ausweich für fehlende Schlüssel | mt.__index = defaults |
| Standard über eine Funktion | mt.__index = function(t, k) ... end |
| Addition anpassen | mt.__add = function(a, b) ... end |
| tostring anpassen | mt.__tostring = function(t) ... end |
| Prototyp-basierte OOP | mt.__index = ClassTable |
Die Lua-Syntax, die du am häufigsten brauchst, auf einer Seite. Dieser Lua-Spickzettel ist eine Schnellreferenz für die Kernsprache - Variablen und Typen, Strings, Kontrollfluss, Funktionen sowie die Tables, die Luas einzige, flexible Datenstruktur bilden, plus ein Blick auf die Standardbibliotheken und Metatables.
Alles hier ist Standard-Lua und läuft auf einem unveränderten Interpreter. Kopiere, was du brauchst, oder probiere jeden Codeschnipsel live im Lua-Playground aus - keine Installation nötig.
Lua-Spickzettel FAQ
Ist dieser Lua-Spickzettel kostenlos?
Wie kann eine Lua-Table sowohl ein Array als auch eine Map sein?
{10, 20, 30}), verhält sich die Table wie ein Array; wenn du String-Schlüssel verwendest ({name = "Ada"}), verhält sie sich wie eine Map. Du kannst in derselben Table sogar beides mischen. Deshalb braucht Lua nur einen strukturierten Typ - die Table deckt Arrays, Dictionaries, Sets und Objekte ab.Warum verwendet Lua 1-basierte Indizierung?
t[1] das erste Element und #t die Anzahl. Der Längenoperator # und Bibliotheksfunktionen wie table.insert und ipairs setzen alle diese 1-basierte Konvention voraus, sodass das Festhalten daran deinen Array-Code wie erwartet funktionieren lässt.