Menu
Coddy logo textTech

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 Direction

Verarbeiten 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
end

Eines 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() :: Direction

Ein 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.

challenge icon

Aufgabe

Einfach

Erstelle 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:

  1. rufe move mit der Direction auf
  2. gib das Ergebnis von getMovementDescription fü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
quiz iconTeste dich selbst

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