Eine generische Identitätsfunktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 58 von 73.
Hier ist die Identity-Funktion richtig umgesetzt — als generische Funktion (generic function):
local function identity<T>(value: T): T
return value
endDas <T> nach dem Funktionsnamen deklariert einen Typparameter — einen Platzhalter, der für "einen bestimmten Typ steht, der bei jedem Aufruf bestimmt wird". Innerhalb der Signatur verwendest du T genau wie einen echten Typ: Der Parameter ist ein T, und die Funktion gibt ein T zurück.
Dasselbe T für Eingabe und Ausgabe zu verwenden, ist der eigentliche Trick — es verbindet beide miteinander. Rufe identity("hello") auf und der Checker entscheidet T = string für diesen Aufruf, sodass das Ergebnis ein string ist. Rufe identity(42) auf und T = number, sodass das Ergebnis ein number ist. Ein Body, 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 existieren die spitzen Klammern nur für den Checker: Zur Laufzeit ist dies die ganz normale Lua-Funktion function identity(value) return value end.
Aufgabe
EinfachErstelle eine generische Funktion namens identity, die:
- einen Typparameter
Tdeklariert - einen Parameter namens
valuevom TypTakzeptiert - diesen Wert mit dem Rückgabetyp
Tzurückgibt
Erstelle dann diese typisierten Variablen unter Verwendung deiner Funktion:
luckyNumbervom Typnumber— rufeidentitymit7aufgreetingvom Typstring— rufeidentitymit"Hello, Luau!"aufisReadyvom Typboolean— rufeidentitymittrueauf
Gib Folgendes aus, jeweils in einer eigenen Zeile:
luckyNumbergreetingisReady- das Ergebnis des Aufrufs von
identitymit"generics"direkt innerhalb vonprint - das Ergebnis des Aufrufs von
identitymit99direkt innerhalb vonprint
Probier es selbst
-- Schreibe Code hier
-- 1) definiere identity<T>(value: T): T
-- 2) erstelle luckyNumber, greeting und isReady mit identity-Aufrufen
-- 3) gib sie aus, dann gib identity("generics") und identity(99) aus
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-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 ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: 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