Verwendung einer generischen Funktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 59 von 73.
Sie teilen identity nie mit, was T ist — die Typprüfung findet es selbst heraus. Das ist Typinferenz: Bei jedem Aufruf sieht sich Luau das Argument an und ermittelt T:
local word = identity("Luau") -- T als string inferiert
local count = identity(12) -- T als number inferiert
local flag = identity(false) -- T als boolean inferiertJeder Aufruf ist unabhängig — T kann in einer Zeile ein string und in der nächsten eine number sein. Das abgeleitete Ergebnis ist genauso sicher wie eine handgeschriebene Annotation: word ist für die Typprüfung ein string, mit vollständiger Autovervollständigung und Fehlerprüfung.
Ein wichtiger Unterschied zu TypeScript: TS ermöglicht es Ihnen, den Typ an der Aufrufstelle mit identity<number>(5) zu erzwingen. Luau besitzt keine Typargumente an der Aufrufstelle — diese Zeile ist keine spezielle Syntax, daher liest Luau die spitzen Klammern als Kleiner-als-/Größer-als-Vergleiche und der Code schlägt fehl. Wenn Sie den Typ explizit angeben möchten, annotieren Sie stattdessen die Variable:
local count: number = identity(12)Sie können die Inferenz mit einem bekannten Werkzeug bei der Arbeit beobachten: typeof gibt den Laufzeit-Typnamen eines Werts zurück, sodass print(typeof(identity(12))) number ausgibt — der Wert hat die generische Funktion völlig unverändert durchlaufen.
Aufgabe
EinfachDie generische identity-Funktion aus der vorherigen Lektion befindet sich bereits in Ihrem Editor. Setzen Sie deren Typableitung ein.
Erstellen Sie drei Variablen und lassen Sie den Checker T inferieren (keine Typannotationen erforderlich):
word— rufen Sieidentitymit"Luau"aufcount— rufen Sieidentitymit12aufflag— rufen Sieidentitymitfalseauf
Geben Sie Folgendes aus, jeweils in einer eigenen Zeile:
word- das Ergebnis von
typeof(word) count- das Ergebnis von
typeof(count) flag- das Ergebnis von
typeof(flag)
Probier es selbst
-- Die generische Identitätsfunktion aus der vorherigen Lektion
local function identity<T>(value: T): T
return value
end
-- Schreibe hier Code
-- 1) erstelle word, count und flag mit identity-Aufrufen (lass T inferieren)
-- 2) gib jeden Wert gefolgt von seinem typeof 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