Menu
CoddyTech

Das Problem, das Generics lösen

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 61 von 80.

Stell dir vor, du brauchst eine Funktion, die einfach jeden Wert zurückgibt, den du ihr übergibst: eine Identitätsfunktion. Mit den Typen, die du bisher kennst, hast du zwei Möglichkeiten, und beide sind problematisch.

Möglichkeit eins: Schreibe für jeden Typ eine separate Kopie. Die Funktionskörper sind identisch; nur die Typannotationen unterscheiden sich:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

Jeder neue Typ bedeutet eine weitere Kopie, und ein Fehler, der in einer Kopie behoben wird, muss in allen behoben werden. Genau solche Duplikate willst du durch Funktionen vermeiden.

Möglichkeit zwei: Fasse sie zu einer Funktion zusammen, die mit any typisiert ist:

local function echo(value: any): any
    return value
end

Jetzt erledigt eine Funktion alles, aber dafür hast du Typsicherheit eingebüßt. Wenn du echo("hello") aufrufst, weiß der Prüfer nicht mehr, dass das Ergebnis ein String ist. Er kennt nur any, sodass die automatische Vervollständigung ausbleibt und Typfehler unbemerkt bleiben: Die Verbindung zwischen dem, was hineingeht, und dem, was herauskommt, ist verloren.

Was du wirklich möchtest, ist eine Funktion, die mit jedem Typ funktioniert und sich merkt, welcher Typ bei jedem Aufruf verwendet wurde. Genau das ermöglichen Generics, und sie sind das Thema dieses Kapitels.

challenge icon

Aufgabe

Einfach

Sieh dir an, was die any-Version von echo vergisst.

  1. Schreibe local function echo(value: any): any, die value zurückgibt.
  2. Speichere echo("hello") in local result.
  3. Gib result und danach typeof(result) aus.

Klicke auf Run Code: Die Ausgabe zeigt hello und string.

Probier es selbst

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) print result und typeof(result)

Alle Lektionen in Einführung in Luau

Übe selbstständig: Online-Luau-Compiler