Self e metodi con i due punti
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 43 di 73.
Scrivere rect.area(rect) funziona, ma hai imparato un modo migliore in Lua OOP: i due punti. rect:area() è esattamente la stessa chiamata: Lua passa automaticamente la tabella prima dei due punti come primo argomento, self.
I due punti aiutano anche nel punto di definizione. function account:deposit(amount) dichiara per te un primo parametro nascosto chiamato 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 è implicito
end
function account:getBalance(): number
return self.balance
endNota come la struttura dichiari self esplicitamente, deposit: (self: Account, amount: number) -> (), anche se i due punti lo nascondono nell'implementazione. I due punti sono zucchero sintattico; il parametro è comunque presente e il tipo lo esplicita. Un metodo che non restituisce nulla è tipizzato con il valore di ritorno vuoto -> ().
Per le chiamate vale la stessa regola che già conosci: account:deposit(250) è identico a account.deposit(account, 250). Lo stesso comportamento a runtime del capitolo OOP: Luau aggiunge semplicemente i tipi.
Sfida
FacileCrea un alias di tipo chiamato Account con:
ownerdi tipostringbalancedi tiponumberdeposit:(self: Account, amount: number) -> ()getBalance:(self: Account) -> number
Crea una tabella account con proprietario "Maya" e saldo 1500, quindi aggiungi entrambi i metodi usando la sintassi di definizione con i due punti (function account:deposit(amount: number) …). deposit aggiunge amount al saldo; getBalance restituisce il saldo corrente.
Usando le chiamate con i due punti:
- stampa il saldo
- deposita
250 - stampa di nuovo il saldo
- stampa il proprietario
Provalo tu
-- Scrivi il codice qui
-- 1) definisci il tipo Account (i metodi includono esplicitamente self nel tipo)
-- 2) crea la tabella dell'account, poi aggiungi deposit/getBalance usando la sintassi con i due punti
-- 3) stampa il saldo, deposita 250, stampa di nuovo il saldo, stampa owner
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappe6Tipizzare le forme delle tabelle
Annotazioni inline delle formeAlias di tipo per le formeProprietà opzionaliForme e tabelle libere a confrontoEstendere le formeAggiungere metodi alle formeSelf e metodi con i due puntiRiepilogo: definire le forme delle tabelleEsercitati da solo: Compilatore Luau online