Methoden zu Shapes hinzufügen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 42 von 73.
Aus deinem Lua-OOP-Kapitel weißt du, dass Tabellen Funktionen genauso wie jeden anderen Wert enthalten können. Shapes können auch diese Funktionsfelder beschreiben: Sie verwandeln einen Shape in einen kleinen Vertrag über Daten und Verhalten.
Ein Methodenfeld verwendet die Syntax für Funktionstypen, die du im Kapitel über Funktionen kennengelernt hast. Sein erster Parameter heißt nach Konvention self, also die Tabelle, zu der die Methode gehört, und der Shape kann sogar auf sich selbst verweisen:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Um den Shape zu implementieren, speicherst du eine Funktion im Feld und versiehst sie mit diesem self-Parameter:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Der Aufruf bedeutet, dass du die Tabelle selbst als self übergibst: greeter.greet(greeter). Über self liest die Methode die Felder der jeweiligen Tabelle, für die sie aufgerufen wurde.
Die Tabelle zweimal zu schreiben, wirkt umständlich, und du kennst bereits Lua's Lösung: den Doppelpunkt. Die nächste Lektion verbindet die :-Syntax mit diesen typisierten Shapes.
Aufgabe
EinfachErstelle einen Typ-Alias namens Rectangle mit:
widthvom Typnumberheightvom Typnumberarea: einer Methode(self: Rectangle) -> number, diewidth * heightzurückgibtperimeter: einer Methode(self: Rectangle) -> number, die2 * (width + height)zurückgibt
Erstelle eine Variable rect vom Typ Rectangle mit der Breite 4, der Höhe 6 und implementiere beide Methoden (denke an den self-Parameter).
Gib Folgendes jeweils in einer eigenen Zeile aus (rufe die Methoden mit der Punkt-Syntax auf und übergib rect als self):
- die Fläche des Rechtecks
- den Umfang des Rechtecks
- die Breite des Rechtecks
Probier es selbst
-- Schreibe hier den Code
-- 1) definiere den Typ Rectangle mit zwei Zahlenfeldern und zwei Methoden
-- 2) erstelle rect (width 4, height 6), das beide Methoden implementiert
-- 3) gib area, perimeter und width 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-ShapesÜbe selbstständig: Online-Lua-Compiler