Verwendung von Literal Union Enums
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 54 von 73.
Literal unions zeigen ihren wahren Wert als Funktionsparameter. Typisieren Sie einen Parameter mit der Union, und der Checker garantiert, dass die Funktion nur mit einem gültigen Member aufgerufen wird:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ Typfehler: kein DirectionVerarbeiten Sie die Members innerhalb der Funktion vollständig (exhaustiv) mit einer if/elseif-Kette. Da der Typ die Eingabe auf vier Werte beschränkt, deckt das Überprüfen von drei Werten und das Überlassen des letzten Werts an else alles ab:
local function describe(direction: Direction): string
if direction == "up" then
return "Going upward"
elseif direction == "down" then
return "Going downward"
elseif direction == "left" then
return "Turning left"
else
return "Turning right"
end
endEines ist zu beachten: Strings, die von außen kommen — wie bei io.read() —, haben den Typ string (einfacher string), da der Checker nicht wissen kann, was ein Benutzer eingeben wird. Der ::-Cast, den Sie zuvor kennengelernt haben, teilt ihm mit, den Wert als Ihren Enum-Typ zu behandeln:
local direction = io.read() :: DirectionEin Cast ist ein Versprechen, keine Prüfung — zur Laufzeit wird die Eingabe nicht überprüft. Produktionscode würde zuerst validieren; hier ermöglicht es typisierten Funktionen, Benutzereingaben sauber entgegenzunehmen.
Aufgabe
EinfachErstelle den Union-Typ aus Literal-Typen Direction mit den Elementen "up", "down", "left" und "right".
Erstelle eine Funktion move, die direction: Direction entgegennimmt und Moving [direction]... ausgibt.
Erstelle eine Funktion getMovementDescription, die direction: Direction entgegennimmt, einen string zurückgibt und jedes Element mit if/elseif/else verarbeitet:
"up"→Going upward"down"→Going downward"left"→Turning left"right"→Turning right
Lies eine Zeile vom Benutzer mit io.read() ein und führe einen Cast zu Direction mit :: durch. Danach:
- rufe
movemit der Direction auf - gib das Ergebnis von
getMovementDescriptionfür dieselbe Direction aus
Probier es selbst
-- Schreibe den Code hier
-- 1) definiere den Typ Direction
-- 2) schreibe move und getMovementDescription (if/elseif/else)
-- 3) lies die Eingabe: local direction = io.read() :: Direction
-- 4) rufe move auf, dann gib die Beschreibung 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-Kombinationen8Enums auf die Luau-Art
Das Enum-Pattern in LuauNumerische Enums mit TablesString-Enums als UnionsVerwendung von Literal Union EnumsKonstante Tables einfrierenZusammenfassung: Enums auf die Luau-Art3Typisierte 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