Verwendung einer generischen Funktion
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 59 von 73.
Du sagst identity nie, was T ist: Der Prüfer findet es selbst heraus. Das ist Typinferenz: Bei jedem Aufruf betrachtet Luau das Argument und löst T auf:
local word = identity("Luau") -- T als string abgeleitet
local count = identity(12) -- T als number abgeleitet
local flag = identity(false) -- T als boolean abgeleitetJeder 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 Annotation: Für den Prüfer ist word ein string, mit vollständiger Autovervollständigung und Fehlerprüfung.
Ein wichtiger Unterschied zu TypeScript: TS erlaubt es dir, den Typ an der Aufrufstelle mit identity<number>(5) zu erzwingen. Luau hat keine Typargumente an der Aufrufstelle. Diese Zeile ist keine spezielle Syntax, daher liest Luau die spitzen Klammern als Vergleiche „kleiner als“/„größer als“, und der Code schlägt fehl. Wenn du den Typ explizit angeben möchtest, annotiere stattdessen die Variable:
local count: number = identity(12)Du kannst die Inferenz mit einem vertrauten Werkzeug bei der Arbeit beobachten: typeof gibt den Laufzeit-Typnamen eines Werts zurück, daher gibt print(typeof(identity(12))) number aus: Der Wert hat die generische Funktion vollständig unverändert durchlaufen.
Aufgabe
EinfachDie generische identity-Funktion aus der vorherigen lesson befindet sich bereits in deinem Editor. Setze ihre Inferenz ein.
Erstelle drei Variablen und lass den Checker T inferieren (keine Annotationen erforderlich):
word: Rufeidentitymit"Luau"aufcount: Rufeidentitymit12aufflag: Rufeidentitymitfalseauf
Gib 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 ableiten)
-- 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Übe selbstständig: Online-Lua-Compiler