Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti / Il protocollo dei metaoggetti 🆕
Metametodi
Un metametodo si chiama con .^ invece che con
.. Il .method ordinario esegue un metodo
dell’oggetto; il .^method chiama un metodo sul
metaoggetto dell’oggetto — chiede qualcosa sul tipo
invece di agire come il tipo.
Hai incontrato .^name, che restituisce il nome del
tipo:
say 42.^name; # IntAltri metametodi ispezionano la struttura di un tipo.
.^attributes elenca i suoi attributi e
.^find_method ti dice se un metodo esiste:
class Animal {
has $.name;
method speak { 'generic' }
}
say Animal.^attributes.elems; # 1
say so Animal.^find_method('speak'); # True
say so Animal.^find_method('fly'); # False.^mro restituisce il method resolution order —
la catena di tipi che Raku percorre, nell’ordine, quando cerca un
metodo. È la linea di ereditarietà di una classe:
class A {}
class B is A {}
say B.^mro.map(*.^name); # (B A Any Mu)B eredita da A, e ogni tipo in ultima
analisi da Any e Mu, quindi la chiamata di un
metodo su un B viene cercata esattamente lungo quel
percorso. Questi metametodi trasformano la struttura dei tuoi tipi in
dati che puoi interrogare a runtime.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Il protocollo dei metaoggetti 🆕 | Quiz — Il MOP →
💪 Oppure vai direttamente agli esercizi di questa sezione.