Generische Arrays
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 64 von 80.
Generics werden besonders nützlich, sobald Tabellen ins Spiel kommen. Du schreibst typisierte Arrays bereits als {number} oder {string}. Innerhalb einer generischen Funktion kann der Elementtyp einfach T sein, und {T} bedeutet „ein Array mit beliebigen Werten, als die sich T herausstellt“.
Hier ist das klassische Beispiel: das erste Element eines beliebigen Arrays abrufen:
local function first<T>(items: {T}): T?
return items[1]
endÜbergib ein {string}, und der Checker leitet T = string ab, sodass das Ergebnis ein String ist. Übergib ein {number}, und das Ergebnis ist eine Zahl. Eine Funktion ersetzt eine ganze Reihe typspezifischer Kopien.
Schau dir den Rückgabetyp genau an: Er ist T?, nicht T. Ein Array kann leer sein, und dann ist items[1] nil: Der optionale Typ, dem du zuvor begegnet bist, sagt das ganz offen: „ein T oder nil“. Der Checker weist Aufrufer darauf hin, den Fall nil zu behandeln, bevor sie das Ergebnis verwenden – genau so fängt eine typisierte Sprache Fehler ab.
Aufgabe
EinfachGib das erste Element eines beliebigen Arrays zurück.
- Schreibe
local function first<T>(items: {T}): T?, dasitems[1]zurückgibt. - Deklariere
local fruits: {string} = {"apple", "banana"}undlocal empty: {number} = {}. - Gib
first(fruits)und danachfirst(empty)aus.
Drücke auf Code ausführen: Die Ausgabe zeigt apple und nil.
Probier es selbst
-- 1) first<T>(items: {T}): T?
-- 2) fruits: {string} und ein leeres {number}
-- 3) Gib jeweils das erste Element aus
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