Eine generische Identitätsfunktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 62 von 80.
Hier ist die Identitätsfunktion richtig umgesetzt, als generische Funktion:
local function identity<T>(value: T): T
return value
endDas <T> nach dem Funktionsnamen deklariert einen Typparameter: einen Platzhalter, der für „einen beliebigen Typ, der bei jedem Aufruf festgelegt wird“ steht. In der Signatur verwendest du T genau wie einen echten Typ: Der Parameter ist vom Typ T, und die Funktion gibt einen Wert vom Typ T zurück.
Dieselbe Eingabe und Ausgabe mit T zu versehen, ist der ganze Trick. Dadurch werden sie miteinander verknüpft. Rufe identity("hello") auf, und der Prüfer legt für diesen Aufruf T = string fest, sodass das Ergebnis vom Typ string ist. Rufe identity(42) auf, und T = number, sodass das Ergebnis vom Typ number ist. Ein Funktionsrumpf, jeder Typ, nichts geht verloren.
T ist nur ein konventioneller Name (kurz für „Type“): <Item> oder <Value> funktionieren genauso gut. Und wie immer in Luau dienen die spitzen Klammern nur dem Prüfer: Zur Laufzeit ist dies die einfache Lua-Funktion function identity(value) return value end.
Aufgabe
EinfachSchreibe eine Funktion, die einen beliebigen Wert mit seinem Typ unverändert zurückgibt.
- Schreibe
local function identity<T>(value: T): T, dievaluezurückgibt. - Deklariere
local luckyNumber: number = identity(7)undlocal greeting: string = identity("Hello, Luau!"). - Gib zuerst
luckyNumberund danngreetingaus.
Drücke auf Run Code: Die Ausgabe zeigt 7 und Hello, Luau!.
Probier es selbst
-- 1) identity<T>(value: T): T
-- 2) luckyNumber und greeting aus Aufrufen von identity
-- 3) beide 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-Kombinationen3Typisierte 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 Maps6Typisieren von Tabellen-Shapes
Inline-Shape-AnnotationenTyp-Aliase für ShapesOptionale EigenschaftenShapes vs. lose TabellenShapes erweiternMethoden zu Shapes hinzufügenSelf und Methoden mit DoppelpunktZusammenfassung: Definieren von Tabellen-Shapes9Generics: Ein erster Einblick
Das Problem, das Generics lösenEine generische IdentitätsfunktionVerwendung einer generischen FunktionGenerische ArraysGenerische Typ-AliaseZusammenfassung: Generische FunktionenÜbe selbstständig: Online-Luau-Compiler