Literale Typen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 33 von 73.
Typen wie string erlauben beliebige Zeichenketten, aber manchmal sind nur wenige exakte Werte sinnvoll. Ein Literaltyp 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 Typen mit nur einem Wert eher eine Kuriosität. In Kombination mit Vereinigungen werden sie zu einem der nützlichsten Werkzeuge von Luau: einer streng kontrollierten Menge zulässiger 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 erkannt; mit einer einfachen string würde er ungehindert durchgehen und erst zur Laufzeit einen Fehler verursachen – wenn du ihn überhaupt rechtzeitig bemerkst.
Literaltypen unterscheiden Groß- und Kleinschreibung und müssen exakt übereinstimmen: "North" entspricht nicht "north". String-Literale sind der häufigste Fall, aber boolesche und (in neueren Luau-Versionen) numerische Literale funktionieren auf dieselbe Weise. Dieses Muster, eine Vereinigung von String-Literalen, ersetzt in Luau außerdem die Enumerationen anderer Sprachen, wie du in einem späteren Kapitel sehen wirst.
Aufgabe
EinfachErstelle drei Literal-Union-Typ-Aliase:
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, sowie eine Funktion updateGameState(state: GameState): string, die "Game state: [state]" zurückgibt.
Gib jeweils in einer eigenen Zeile aus:
movePlayer(playerDirection)updateGameState(currentState)- den Wert von
selectedDifficulty
Probier es selbst
-- Schreibe den Code hier
-- 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Übe selbstständig: Online-Lua-Compiler