Verwendung einer generischen Funktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 63 von 80.
Du gibst identity nie an, was T ist: Der Prüfer findet es selbst heraus. Das ist Typinferenz: Bei jedem Aufruf betrachtet Luau das Argument und ermittelt T:
local word = identity("Luau") -- T wird als string erschlossen
local count = identity(12) -- T wird als number erschlossen
local flag = identity(false) -- T wird als boolean erschlossenJeder Aufruf ist unabhängig: T kann in einer Zeile ein String und in der nächsten eine Zahl sein. Das inferierte Ergebnis ist genauso sicher wie eine von Hand geschriebene Typannotation: Für den Prüfer ist word ein string, mit vollständiger Autovervollständigung und Fehlerprüfung.
Ein wichtiger Unterschied zu TypeScript: TS lässt dich den Typ am Aufruf erzwingen, indem du identity<number>(5) schreibst. Luau kennt keine Typargumente an Aufrufstellen. 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 du den Typ ausdrücklich angeben möchtest, annotiere stattdessen die Variable:
local count: number = identity(12)Du kannst die Inferenz mit einem vertrauten Werkzeug beobachten: typeof gibt den Namen des Laufzeittyps eines Werts zurück. Daher gibt print(typeof(identity(12))) number aus: Der Wert hat die generische Funktion völlig unverändert durchlaufen.
Aufgabe
EinfachLass den Typprüfer T bei jedem Aufruf ermitteln.
- Speichere unter der Funktion
identity("Oslo")inlocal cityundidentity(42)inlocal floors, ohne Typannotationen. - Gib zuerst
typeof(city), danntypeof(floors)aus.
Drücke auf Run Code: Die Ausgabe zeigt string und number.
Probier es selbst
-- Die generische Identitätsfunktion aus der letzten Lektion
local function identity<T>(value: T): T
return value
end
-- 1) city und floors aus Aufrufen von identity, ohne Typannotationen
-- 2) typeof für 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