Verwendung von Literal Union Enums
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 58 von 80.
Literal-Unionen spielen ihre Stärken bei Funktionsparametern aus. Typisierst du einen Parameter mit der Union, garantiert der Prüfer, dass die Funktion nur mit einem gültigen Mitglied aufgerufen wird:
type Direction = "up" | "down" | "left" | "right"
local function move(direction: Direction)
print(`Moving {direction}...`)
end
move("left") -- ✓
move("north") -- ✗ Typfehler: kein DirectionBehandle die Mitglieder innerhalb der Funktion vollständig mit einer if/elseif-Kette. Da der Typ die Eingabe auf vier Werte beschränkt, deckt die Prüfung von drei Werten und die Behandlung des letzten durch else alle Fälle 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
endEin Haken: Zeichenfolgen, die von außerhalb kommen, etwa von io.read(), haben den einfachen Typ string, weil der Prüfer nicht wissen kann, was ein Benutzer eingibt. Der Cast-Operator :: von Luau schafft Abhilfe: value :: Type weist den Prüfer an, den Wert als diesen Typ zu behandeln. Die Lektion zu Typzusicherungen gegen Ende dieses Abschnitts behandelt Casts ausführlich; fürs Erste genügt eine Zeile:
local direction = io.read() :: DirectionEin Cast ist ein Versprechen, keine Prüfung; zur Laufzeit wird die Eingabe nicht überprüft. Produktionscode würde sie zuerst validieren; hier ermöglicht der Cast typisierten Funktionen, Benutzereingaben sauber anzunehmen.
Aufgabe
EinfachWandle eine vom Spieler eingegebene Richtung in eine Aktion um.
- Schreibe
type Direction = "up" | "down" | "left" | "right". - Schreibe
local function getAction(direction: Direction): string, die"Climb","Drop","Turn left"oder"Turn right"zurückgibt. - Lies
local direction = io.read() :: Directionein und gibgetAction(direction)aus.
Klicke auf „Spielen“: Bei der Eingabe up wird als Ausgabe Climb angezeigt.
Probier es selbst
-- 1) Typ Direction
-- 2) getAction(direction: Direction): string
-- 3) local direction = io.read() :: Direction, dann die Aktion ausgeben
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 Luau4Mit Funktionen arbeiten
Parameter und Rückgabewerte typisierenAnonyme Funktionen typisierenFunktionen ohne RückgabewertOptionale ParameterStandardwerte für ParameterStandardwerte für boolesche WerteFunktionen mit variabler ParameteranzahlFunktionstypen definierenRückblick: typisierte Funktionen7Projekt: Typisierter Aufgabenmanager
Projekt: Die AufgabenstrukturFunktion zum Hinzufügen einer Aufgabe2Grundlegende Typen
Zahl, String und BooleanDer Typ „any“: NotausgangDer Typ „unknown“Nil- und optionale TypenTypinferenz in der PraxisExplizite TypannotationenRückblick: Übung zu grundlegenden Typen5Typ-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 ArraysElemente hinzufügen und auslesenWas ist ein Map-Typ?Maps deklarieren und auf Elemente zugreifenTabellen durchlaufenTabellen mit gemischten FormenEin Raster auslesenEin Raster erstellentable.unpackRückblick: Arrays und MapsÜbe selbstständig: Online-Luau-Compiler