Standard-Lua-Bibliotheken
Standard-Lua-Bibliotheken
Abschnitt betitelt „Standard-Lua-Bibliotheken“Kern-Lua-Bibliotheken, die automatisch in allen Wippy-Prozessen verfügbar sind. Kein require() erforderlich.
Globale Funktionen
Abschnitt betitelt „Globale Funktionen“Typ und Konvertierung
Abschnitt betitelt „Typ und Konvertierung“type(value) -- Gibt zurück: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata"tonumber(s [,base]) -- Zu Zahl konvertieren, optionale Basis (2-36)tostring(value) -- Zu String konvertieren, ruft __tostring-Metamethode aufAssertions und Fehler
Abschnitt betitelt „Assertions und Fehler“assert(v [,msg]) -- Wirft Fehler wenn v false/nil ist, gibt sonst v zurückerror(msg [,level]) -- Wirft Fehler auf angegebenem Stack-Level (Standard 1)pcall(fn, ...) -- Geschützter Aufruf, gibt ok, result_or_error zurückxpcall(fn, errh) -- Geschützter Aufruf mit Fehlerhandler-FunktionTabelleniteration
Abschnitt betitelt „Tabelleniteration“pairs(t) -- Iteriert alle Schlüssel-Wert-Paareipairs(t) -- Iteriert Array-Teil (1, 2, 3, ...)next(t [,index]) -- Holt nächstes Schlüssel-Wert-Paar nach IndexMetatables
Abschnitt betitelt „Metatables“getmetatable(obj) -- Holt Metatable (oder __metatable-Feld wenn geschützt)setmetatable(t, mt) -- Setzt Metatable, gibt t zurückRoher Tabellenzugriff
Abschnitt betitelt „Roher Tabellenzugriff“Umgeht Metamethoden für direkten Tabellenzugriff:
rawget(t, k) -- Holt t[k] ohne __indexrawset(t, k, v) -- Setzt t[k]=v ohne __newindexrawequal(a, b) -- Vergleicht ohne __eqHilfsfunktionen
Abschnitt betitelt „Hilfsfunktionen“select(index, ...) -- Gibt Argumente ab Index zurückselect("#", ...) -- Gibt Anzahl der Argumente zurückunpack(t [,i [,j]]) -- Gibt t[i] bis t[j] als mehrere Werte zurückprint(...) -- Gibt Werte aus (verwendet strukturiertes Logging in Wippy)Globale Variablen
Abschnitt betitelt „Globale Variablen“_G -- Die globale Umgebungstabelle_VERSION -- Lua-VersionsstringTabellenmanipulation
Abschnitt betitelt „Tabellenmanipulation“Funktionen zur Modifikation von Tabellen:
table.insert(t, [pos,] value) -- Fügt Wert an Position ein (Standard: Ende)table.remove(t [,pos]) -- Entfernt und gibt Element an Position zurück (Standard: letztes)table.concat(t [,sep [,i [,j]]]) -- Verkettet Array-Elemente mit Trennzeichentable.sort(t [,comp]) -- Sortiert in-place, comp(a,b) gibt true zurück wenn a < btable.pack(...) -- Packt varargs in Tabelle mit 'n'-Feldtable.unpack(t [,i [,j]]) -- Entpackt Tabellen-Elemente als mehrere Wertelocal items = {"a", "b", "c"}
table.insert(items, "d") -- {"a", "b", "c", "d"}table.insert(items, 2, "x") -- {"a", "x", "b", "c", "d"}table.remove(items, 2) -- {"a", "b", "c", "d"}, gibt "x" zurück
local csv = table.concat(items, ",") -- "a,b,c,d"
table.sort(items, function(a, b) return a > b -- Absteigende Reihenfolgeend)String-Operationen
Abschnitt betitelt „String-Operationen“String-Manipulationsfunktionen. Auch als Methoden auf String-Werten verfügbar:
Musterabgleich
Abschnitt betitelt „Musterabgleich“string.find(s, pattern [,init [,plain]]) -- Findet Muster, gibt start, end, captures zurückstring.match(s, pattern [,init]) -- Extrahiert passenden Substringstring.gmatch(s, pattern) -- Iterator über alle Trefferstring.gsub(s, pattern, repl [,n]) -- Ersetzt Treffer, gibt string, count zurückGross-/Kleinschreibung
Abschnitt betitelt „Gross-/Kleinschreibung“string.upper(s) -- Zu Großbuchstaben konvertierenstring.lower(s) -- Zu Kleinbuchstaben konvertierenSubstrings und Zeichen
Abschnitt betitelt „Substrings und Zeichen“string.sub(s, i [,j]) -- Substring von i bis j (negative Indizes vom Ende)string.len(s) -- String-Länge (oder #s verwenden)string.byte(s [,i [,j]]) -- Numerische Codes der Zeichenstring.char(...) -- Erstellt String aus Zeichencodesstring.rep(s, n [,sep]) -- Wiederholt String n-mal mit Trennzeichenstring.reverse(s) -- Kehrt String umFormatierung
Abschnitt betitelt „Formatierung“string.format(fmt, ...) -- Printf-artige FormatierungFormat-Spezifizierer: %d (Integer), %f (Float), %s (String), %q (quoted), %x (Hex), %o (Oktal), %e (wissenschaftlich), %% (literales %)
local s = "Hello, World!"
-- Musterabgleichlocal start, stop = string.find(s, "World") -- 8, 12local word = string.match(s, "%w+") -- "Hello"
-- Substitutionlocal new = string.gsub(s, "World", "Wippy") -- "Hello, Wippy!"
-- Methoden-Syntaxlocal upper = s:upper() -- "HELLO, WORLD!"local part = s:sub(1, 5) -- "Hello"| Muster | Trifft auf |
|---|---|
. | Beliebiges Zeichen |
%a | Buchstaben |
%d | Ziffern |
%w | Alphanumerisch |
%s | Leerzeichen |
%p | Interpunktion |
%c | Steuerzeichen |
%x | Hexadezimale Ziffern |
%z | Null |
[set] | Zeichenklasse |
[^set] | Negierte Klasse |
* | 0 oder mehr (gierig) |
+ | 1 oder mehr (gierig) |
- | 0 oder mehr (nicht-gierig) |
? | 0 oder 1 |
^ | Stringanfang |
$ | Stringende |
%b() | Ausbalanciertes Paar |
(...) | Capture-Gruppe |
Großbuchstaben-Versionen (%A, %D, etc.) treffen auf das Komplement.
Mathematische Funktionen
Abschnitt betitelt „Mathematische Funktionen“Mathematische Funktionen und Konstanten:
Konstanten {id=“math-constants”}
Abschnitt betitelt „Konstanten {id=“math-constants”}“math.pi -- 3.14159...math.huge -- Unendlichmath.mininteger -- Minimaler Integermath.maxinteger -- Maximaler IntegerGrundoperationen
Abschnitt betitelt „Grundoperationen“math.abs(x) -- Absolutwertmath.min(...) -- Minimum der Argumentemath.max(...) -- Maximum der Argumentemath.floor(x) -- Abrundenmath.ceil(x) -- Aufrundenmath.modf(x) -- Ganzzahl- und Bruchteilmath.fmod(x, y) -- Gleitkomma-RestPotenzen und Wurzeln
Abschnitt betitelt „Potenzen und Wurzeln“math.sqrt(x) -- Quadratwurzelmath.pow(x, y) -- x^y (oder x^y-Operator verwenden)math.exp(x) -- e^xmath.log(x [,base]) -- Natürlicher Log (oder Log zur Basis n)Trigonometrie
Abschnitt betitelt „Trigonometrie“math.sin(x) math.cos(x) math.tan(x) -- Radiantmath.asin(x) math.acos(x) math.atan(y [,x])math.sinh(x) math.cosh(x) math.tanh(x) -- Hyperbolischmath.deg(r) -- Radiant zu Gradmath.rad(d) -- Grad zu RadiantZufallszahlen
Abschnitt betitelt „Zufallszahlen“math.random() -- Zufälliger Float [0,1)math.random(n) -- Zufälliger Integer [1,n]math.random(m, n) -- Zufälliger Integer [m,n]math.randomseed(x) -- Zufalls-Seed setzenTypkonvertierung
Abschnitt betitelt „Typkonvertierung“math.tointeger(x) -- Zu Integer konvertieren oder nilmath.type(x) -- "integer", "float", oder nilmath.ult(m, n) -- Unsigned Kleiner-als-VergleichCoroutinen
Abschnitt betitelt „Coroutinen“Coroutine-Erstellung und -Steuerung. Siehe Channels und Coroutinen für Channels und Nebenläufigkeitsmuster:
coroutine.create(fn) -- Erstellt Coroutine aus Funktioncoroutine.resume(co, ...) -- Startet/setzt Coroutine fortcoroutine.yield(...) -- Unterbricht Coroutine, gibt Werte an resume zurückcoroutine.status(co) -- "running", "suspended", "normal", "dead"coroutine.running() -- Aktuelle Coroutine (nil wenn Hauptthread)coroutine.wrap(fn) -- Erstellt Coroutine als aufrufbare FunktionNebenläufige Coroutinen spawnen
Abschnitt betitelt „Nebenläufige Coroutinen spawnen“Spawnt eine nebenläufige Coroutine, die unabhängig läuft (Wippy-spezifisch):
coroutine.spawn(fn) -- Spawnt Funktion als nebenläufige Coroutine-- Hintergrundaufgabe spawnencoroutine.spawn(function() while true do check_health() time.sleep("30s") endend)
-- Hauptausführung setzt sofort fortprocess_request()Fehlerbehandlung
Abschnitt betitelt „Fehlerbehandlung“Strukturierte Fehlererstellung und -klassifizierung. Siehe Fehlerbehandlung für vollständige Dokumentation:
Konstanten {id=“error-constants”}
Abschnitt betitelt „Konstanten {id=“error-constants”}“errors.UNKNOWN -- Nicht klassifizierter Fehlererrors.INVALID -- Ungültiges Argument oder Eingabeerrors.NOT_FOUND -- Ressource nicht gefundenerrors.ALREADY_EXISTS -- Ressource existiert bereitserrors.PERMISSION_DENIED -- Berechtigung verweigerterrors.TIMEOUT -- Operation hat Zeitlimit überschrittenerrors.CANCELED -- Operation wurde abgebrochenerrors.UNAVAILABLE -- Service nicht verfügbarerrors.INTERNAL -- Interner Fehlererrors.CONFLICT -- Konflikt (z.B. gleichzeitige Änderung)errors.RATE_LIMITED -- Rate-Limit überschrittenFunktionen {id=“error-functions”}
Abschnitt betitelt „Funktionen {id=“error-functions”}“-- Fehler aus String erstellenlocal err = errors.new("something went wrong")
-- Fehler mit Metadaten erstellenlocal err = errors.new({ message = "User not found", kind = errors.NOT_FOUND, retryable = false, details = {user_id = 123}})
-- Existierenden Fehler mit Kontext wrappenlocal wrapped = errors.wrap(err, "failed to load profile")
-- Fehlerart prüfenif errors.is(err, errors.NOT_FOUND) then -- nicht gefunden behandelnend
-- Aufrufstack aus Fehler holenlocal stack = errors.call_stack(err)Fehlermethoden
Abschnitt betitelt „Fehlermethoden“err:message() -- Fehlermeldungsstring holenerr:kind() -- Fehlerart holen (z.B. "NOT_FOUND")err:retryable() -- true, false, oder nil (unbekannt)err:details() -- Details-Tabelle holen oder nilerr:stack() -- Stack-Trace als String holenUTF-8 Unicode
Abschnitt betitelt „UTF-8 Unicode“Unicode UTF-8 String-Behandlung:
Konstanten {id=“utf8-constants”}
Abschnitt betitelt „Konstanten {id=“utf8-constants”}“utf8.charpattern -- Muster das einzelnes UTF-8-Zeichen matchtFunktionen {id=“utf8-functions”}
Abschnitt betitelt „Funktionen {id=“utf8-functions”}“utf8.char(...) -- Erstellt String aus Unicode-Codepointsutf8.codes(s) -- Iterator über Codepoints: for pos, code in utf8.codes(s)utf8.codepoint(s [,i [,j]]) -- Holt Codepoints an Positionen i bis jutf8.len(s [,i [,j]]) -- Zählt UTF-8-Zeichen (nicht Bytes)utf8.offset(s, n [,i]) -- Byte-Position des n-ten Zeichens ab Position ilocal s = "Hello, 世界"
-- Zeichen zählen (nicht Bytes)print(utf8.len(s)) -- 9
-- Über Codepoints iterierenfor pos, code in utf8.codes(s) do print(pos, code, utf8.char(code))end
-- Codepoint an Position holenlocal code = utf8.codepoint(s, 8) -- Erstes chinesisches Zeichen
-- String aus Codepoints erstellenlocal emoji = utf8.char(0x1F600) -- Grinsendes GesichtEingeschränkte Features
Abschnitt betitelt „Eingeschränkte Features“Die folgenden Standard-Lua-Features sind aus Sicherheitsgründen NICHT verfügbar:
| Feature | Alternative |
|---|---|
load, loadstring, loadfile, dofile | Dynamische Auswertung-Modul verwenden |
collectgarbage | Automatische GC |
rawlen | #-Operator verwenden |
io.* | Dateisystem-Modul verwenden |
os.execute, os.exit, os.remove, os.rename, os.tmpname | Befehlsausführung, Umgebung-Module verwenden |
debug.* (außer traceback) | Nicht verfügbar |
package.loadlib | Native Bibliotheken nicht unterstützt |
Siehe auch
Abschnitt betitelt „Siehe auch“- Channels und Coroutinen - Go-artige Channels für Nebenläufigkeit
- Fehlerbehandlung - Strukturierte Fehler erstellen und behandeln
- OS-Zeit - Systemzeit-Funktionen