Literale Typen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 33 von 73.
Typen wie string erlauben jeden String — aber manchmal machen nur wenige exakte Werte Sinn. Ein Literal Type verwendet den Wert selbst als Typ:
local mode: "dark" = "dark" -- nur der String "dark" ist erlaubt
local locked: true = true -- nur der Boolean true ist erlaubtFür sich genommen sind Einzelwert-Typen eine Kuriosität. In Kombination mit Unions werden sie zu einem der nützlichsten Werkzeuge von Luau — einer strikt kontrollierten Menge erlaubter Werte:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ Typfehler!Jetzt wird ein Tippfehler wie "nort" oder ein ungültiger Wert wie "diagonal" bereits beim Bearbeiten abgefangen — mit einem einfachen string würde er durchgehen und erst zur Laufzeit einen Fehler verursachen, wenn man Glück hat, es überhaupt zu bemerken.
Literal Types sind Groß-/Kleinschreibung-sensitiv und exakt: "North" stimmt nicht mit "north" überein. String-Literale sind der häufigste Fall, aber Boolean- und (in neueren Luau-Versionen) Zahlen-Literale funktionieren auf dieselbe Weise. Dieses Muster — eine Union aus String-Literalen — ist auch die Art und Weise, wie Luau Enums anderer Sprachen ersetzt, wie Sie in einem späteren Kapitel sehen werden.
Aufgabe
EinfachErstelle drei Typ-Aliase für Literalgruppen (literal unions):
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
Deklariere unter Verwendung der Aliase:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
Erstelle eine Funktion movePlayer(direction: Direction): string, die "Moving [direction]" zurückgibt, und eine Funktion updateGameState(state: GameState): string, die "Game state: [state]" zurückgibt.
Gib jeweils in einer eigenen Zeile Folgendes aus:
movePlayer(playerDirection)updateGameState(currentState)- den Wert von
selectedDifficulty
Probier es selbst
-- Schreibe hier den Code
-- type Direction / GameState / Difficulty als Literal-Unions
-- deklariere playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- gib die drei Ergebnisse aus
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Einführung in Luau
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und Maps