Methoden zu Shapes hinzufügen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 42 von 73.
Aus Ihrem Lua-OOP-Kapitel wissen Sie, dass Tabellen Funktionen genau wie jeden anderen Wert enthalten können. Shapes können diese Funktionsfelder ebenfalls beschreiben — und verwandeln so ein Shape in einen kleinen Vertrag aus Daten und Verhalten.
Ein Method-Feld verwendet die Syntax für Funktionstypen, die Sie im Kapitel über Funktionen kennengelernt haben. Sein erster Parameter wird konventionell self genannt — die Table, zu der die Method gehört — und das Shape kann sich sogar selbst referenzieren:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Um das Shape zu implementieren, speichern Sie eine Function in dem Feld und übergeben ihr diesen self-Parameter:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Es aufzurufen bedeutet, die Table selbst als self zu übergeben: greeter.greet(greeter). Über self liest die Method die Fields derjenigen Table aus, auf der sie aufgerufen wurde.
Die Table zweimal zu schreiben fühlt sich umständlich an — und Sie kennen bereits Luas Lösung: den Doppelpunkt. Die nächste Lektion verbindet die :-Syntax mit diesen typisierten Shapes.
Aufgabe
EinfachRectangle mit: widthvom Typnumberheightvom Typnumberarea— eine Methode(self: Rectangle) -> number, diewidth * heightzurückgibtperimeter— eine Methode(self: Rectangle) -> number, die2 * (width + height)zurückgibt
Erstelle eine Variable rect vom Typ Rectangle mit Breite 4, Höhe 6 und beiden Methoden implementiert (denke an den Parameter self).
Drucke jeweils in einer eigenen Zeile (rufe die Methoden mit Punkt-Syntax auf und übergib rect als self):
- die Fläche des Rechtecks (area)
- den Umfang des Rechtecks (perimeter)
- die Breite des Rechtecks (width)
Probier es selbst
-- Schreibe Code hier
-- 1) definiere Typ Rectangle mit zwei number-Feldern 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