Self und Methoden mit Doppelpunkt
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 45 von 80.
rect.area(rect) zu schreiben funktioniert, aber du hast bereits im Lua-OOP eine bessere Möglichkeit kennengelernt: den Doppelpunkt. rect:area() ist genau derselbe Aufruf: Lua übergibt automatisch die Tabelle vor dem Doppelpunkt als erstes Argument, self.
Der Doppelpunkt hilft auch bei der Definition. function account:deposit(amount) deklariert für dich einen verborgenen ersten Parameter namens self:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self ist implizit
end
function account:getBalance(): number
return self.balance
endBeachte, dass die Form self explizit deklariert, deposit: (self: Account, amount: number) -> (), obwohl der Doppelpunkt es in der Implementierung verbirgt. Der Doppelpunkt ist syntaktischer Zucker; der Parameter ist weiterhin vorhanden und der Typ führt ihn ausdrücklich auf. Eine Methode, die nichts zurückgibt, wird mit der leeren Rückgabe -> () typisiert.
Beim Aufruf gilt dieselbe Regel, die du bereits kennst: account:deposit(250) ist identisch mit account.deposit(account, 250). Dasselbe Laufzeitverhalten wie in deinem OOP-Kapitel: Luau fügt lediglich Typen hinzu.
Beachte, dass account selbst keine Typannotation hat. Der Typ Account beschreibt die fertige Tabelle, und die Tabelle entspricht ihm erst, wenn beide Methoden hinzugefügt wurden; local account: Account = {owner = "Maya", balance = 1500} würde im strikten Modus wegen der fehlenden Methoden einen Fehler melden.
Aufgabe
EinfachFüge einem Konto zwei Methoden mit der Doppelpunktsyntax hinzu.
- Definiere unter der Tabelle
function account:deposit(amount: number), dasamountzuself.balanceaddiert. - Definiere
function account:getBalance(): number, dasself.balancezurückgibt. - Gib
account:getBalance()aus, rufeaccount:deposit(120)auf und gib anschließend erneutaccount:getBalance()aus.
Drücke auf Run Code: Die Ausgabe zeigt 300, dann 420.
Probier es selbst
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) Gib den Kontostand aus, zahle 120 ein und gib ihn erneut 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-ShapesÜbe selbstständig: Online-Luau-Compiler