Eine generische Identitätsfunktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 58 von 73.
Hier ist die Identitätsfunktion korrekt 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 bei jedem Aufruf festgelegten Typ“ steht. Innerhalb der Signatur verwendest du T genau wie einen echten Typ: Der Parameter ist ein T, und die Funktion gibt ein T zurück.
Die Verwendung desselben T für Eingabe und Ausgabe ist der ganze Kniff. Dadurch werden beide miteinander verknüpft. Rufe identity("hello") auf, und der Prüfer entscheidet für diesen Aufruf T = string, sodass das Ergebnis ein string ist. Rufe identity(42) auf, und T = number, sodass das Ergebnis ein number ist. Ein Funktionskörper, 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 Prüfer: Zur Laufzeit ist dies die einfache 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 mithilfe deiner Funktion:
luckyNumbervom Typnumber: rufeidentitymit7aufgreetingvom Typstring: rufeidentitymit"Hello, Luau!"aufisReadyvom Typboolean: rufeidentitymittrueauf
Gib Folgendes aus, jeweils in einer eigenen Zeile:
luckyNumbergreetingisReady- das Ergebnis des direkten Aufrufs von
identitymit"<code>generics" innerhalb vonprint - das Ergebnis des direkten Aufrufs von
identitymit99innerhalb vonprint
Probier es selbst
-- Schreibe hier den Code
-- 1) definiere identity<T>(value: T): T
-- 2) erstelle luckyNumber, greeting und isReady mit identity-Aufrufen
-- 3) gib sie aus, dann gib identity(den genauen Text aus den Anweisungen) 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Übe selbstständig: Online-Lua-Compiler