Das Problem, das Generics lösen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 57 von 73.
Stellen Sie sich vor, Sie benötigen eine Funktion, die einfach jeden Wert zurückgibt, den Sie ihr übergeben — eine Identity-Funktion. Mit den Typen, die Sie bisher kennen, haben Sie zwei Optionen, und beide schmerzen.
Option eins: Schreiben Sie eine separate Kopie pro Typ. Die Funktionskörper sind identisch; nur die Annotationen unterscheiden sich:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endJeder neue Typ bedeutet eine weitere Kopie, und ein Bug, der in einer behoben wird, muss in allen behoben werden. Das ist genau die Duplizierung, die man durch das Schreiben von Funktionen vermeiden möchte.
Option zwei: Fassen Sie sie in einer einzigen Funktion zusammen, die mit any typisiert ist:
local function echo(value: any): any
return value
endJetzt verarbeitet eine Funktion alles — aber Sie haben mit der Typsicherheit bezahlt. Wenn Sie echo("hello") aufrufen, weiß der checker nicht mehr, dass das Ergebnis ein string ist. Er weiß nur any, sodass die Autovervollständigung nicht mehr funktioniert und Typfehler durchschlüpfen: Die Verbindung zwischen dem, was hineinging, und dem, was herauskommt, geht verloren.
Was Sie wirklich wollen, ist eine Funktion, die für jeden Typ funktioniert und sich merkt, welchen Typ jeder Aufruf verwendet hat. Genau das bieten Ihnen Generics — und sie sind das Thema dieses Kapitels.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
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