Menu
CoddyTech

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 Direction

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

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

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

challenge icon

Aufgabe

Einfach

Wandle eine vom Spieler eingegebene Richtung in eine Aktion um.

  1. Schreibe type Direction = "up" | "down" | "left" | "right".
  2. Schreibe local function getAction(direction: Direction): string, die "Climb", "Drop", "Turn left" oder "Turn right" zurückgibt.
  3. Lies local direction = io.read() :: Direction ein und gib getAction(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

Übe selbstständig: Online-Luau-Compiler