Methoden zu Shapes hinzufügen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 44 von 80.
Aus deinem Lua-OOP-Kapitel weißt du, dass Tabellen Funktionen wie jeden anderen Wert enthalten können. Shapes können auch diese Funktionsfelder beschreiben: So wird eine Shape zu einem kleinen Vertrag aus Daten und Verhalten.
Ein Methodenfeld verwendet die Syntax für Funktionstypen, die du im Funktionskapitel gelernt hast. Sein erster Parameter heißt üblicherweise self, also die Tabelle, zu der die Methode gehört, und die Shape kann sogar auf sich selbst verweisen:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Um die Shape umzusetzen, speicherst du eine Funktion im Feld und gibst ihr diesen self-Parameter:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Wenn du sie aufrufst, musst du die Tabelle selbst als self übergeben: greeter.greet(greeter). Über self liest die Methode die Felder der jeweiligen Tabelle aus, für die sie aufgerufen wurde.
Die Tabelle zweimal zu schreiben, wirkt umständlich, und du kennst bereits Lua’s Abhilfe: den Doppelpunkt. In der nächsten Lektion wird die :-Syntax mit diesen typisierten Shapes verknüpft.
Aufgabe
EinfachGib einer Rechteckform eine Methode, die ihre Fläche berechnet.
- Schreibe
type Rectangle = {width: number, height: number, area: (self: Rectangle) -> number}. - Erstelle
local rect: Rectanglemit der Breite4, der Höhe6undarea = function(self: Rectangle): number, dieself.width * self.heightzurückgibt. - Gib
rect.area(rect)aus, dannrect.width.
Klicke auf Run Code: Die Ausgabe zeigt 24 und 4.
Probier es selbst
-- 1) Typ Rectangle mit width, height und einer area-Methode
-- 2) lokales rect: Rectangle (width 4, height 6) mit implementierter area-Methode
-- 3) Gib die Fläche aus, dann die Breite
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-ShapesÜbe selbstständig: Online-Luau-Compiler