Cursus Raku / Objecten, in- en uitvoer en excepties / Klassen en objecten / Het meta-objectprotocol 🆕
Meta-methoden
Een metamethode wordt met .^ in plaats van
. aangeroepen. De gewone .method draait een
methode van het object; de .^method roept een methode aan
op het metaobject van het object — hij vraagt iets óver
het type in plaats van als het type op te treden.
Je bent .^name tegengekomen, die de naam van het type
teruggeeft:
say 42.^name; # IntAndere metamethoden inspecteren de structuur van een type.
.^attributes somt de attributen op, en
.^find_method vertelt je of een methode bestaat:
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 geeft de method resolution order terug —
de keten van typen die Raku in volgorde doorzoekt bij het opzoeken van
een methode. Het is de overervingslijn van een klasse:
class A {}
class B is A {}
say B.^mro.map(*.^name); # (B A Any Mu)B erft van A, en elk type uiteindelijk van
Any en Mu, dus een methodeaanroep op een
B wordt precies langs dat pad gezocht. Deze metamethoden
maken van de structuur van je typen gegevens die je tijdens het draaien
kunt bevragen.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Het meta-objectprotocol 🆕 | Quiz — Het MOP →
💪 Of ga direct naar de
oefeningen in deze sectie.