Self und Methoden mit Doppelpunkt
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 43 von 73.
Das Schreiben von rect.area(rect) funktioniert, aber du hast damals in Lua OOP einen besseren Weg kennengelernt: den Doppelpunkt (colon). rect:area() ist genau derselbe Aufruf — Lua übergibt die table vor dem colon automatisch als erstes Argument, self.
Der colon hilft auch bei der Definition. function account:deposit(amount) deklariert automatisch einen versteckten ersten Parameter namens self für dich:
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, wie der Type self explicitly deklariert — deposit: (self: Account, amount: number) -> () —, obwohl der colon ihn in der Implementierung verbirgt. Der colon ist Syntaktischer Zucker (Syntactic Sugar); der Parameter ist weiterhin vorhanden, und der type drückt ihn explizit aus. Eine Methode, die nichts zurückgibt, wird mit dem leeren Rückgabetyp -> () typisiert.
Das Aufrufen folgt derselben 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.
Aufgabe
EinfachErstelle einen Typ-Alias namens Account mit:
ownervom Typstringbalancevom Typnumberdeposit—(self: Account, amount: number) -> ()getBalance—(self: Account) -> number
Erstelle eine Tabelle account mit owner "Maya" und balance 1500, und hänge dann beide Methoden unter Verwendung der colon definition-Syntax an (function account:deposit(amount: number) …). deposit addiert amount zu balance; getBalance gibt den aktuellen balance-Wert zurück.
Verwende colon calls, um:
balanceauszugeben250zudepositbalanceagainauszugebenownerauszugeben
Probier es selbst
-- Schreibe Code hier
-- 1) definiere Typ Account (Methoden nehmen self explizit im Typ)
-- 2) erstelle die account-Tabelle, dann hänge deposit/getBalance mit Doppelpunkt-Syntax an
-- 3) gib balance aus, deposit 250, gib balance erneut aus, gib owner 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