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-Unionen bewähren sich als Funktionsparameter. Typisiere einen Parameter mit der Union, und der Checker garantiert, dass die Funktion immer 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") -- ✗ type error: not a Direction

Behandle die Mitglieder innerhalb der Funktion erschöpfend mit einer if/elseif-Kette. Da der Typ die Eingabe auf vier Werte begrenzt, deckt die Prüfung von drei Werten zusammen mit else für den letzten Wert 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

Eine Besonderheit: Zeichenketten, die von außerhalb kommen, etwa von io.read(), werden als einfache string typisiert, weil der Checker nicht wissen kann, was ein Benutzer eingeben wird. Der zuvor gelernte ::-Cast weist ihn an, den Wert als deinen Enum-Typ zu behandeln:

local direction = io.read() :: Direction

Ein Cast ist ein Versprechen, keine Prüfung; zur Laufzeit überprüft nichts die Eingabe. Produktionscode würde zunächst validieren; hier ermöglicht er es typisierten Funktionen, Benutzereingaben problemlos zu akzeptieren.

challenge icon

Aufgabe

Einfach

Erstelle den Literal-Union-Typ Direction mit den Mitgliedern "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 Mitglied mit if/elseif/else behandelt:

  • "up"Going upward
  • "down"Going downward
  • "left"Turning left
  • "right"Turning right

Lies mit io.read() eine Zeile vom Benutzer ein und wandle sie mit Direction in :: um. Dann:

  1. Rufe move mit der Richtung auf.
  2. Gib das Ergebnis von getMovementDescription für dieselbe Richtung 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

Übe selbstständig: Online-Lua-Compiler