Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Klassen und Objekte / Das Metaobjekt-Protokoll 🆕
Meta-Methoden
Eine Metamethode wird mit .^ statt mit
. aufgerufen. Das gewöhnliche .method führt
eine Methode des Objekts aus; das .^method ruft eine
Methode auf dem Metaobjekt des Objekts auf — es fragt
also nach dem Typ, statt als der Typ zu handeln.
Sie kennen bereits .^name, das den Namen des Typs
liefert:
say 42.^name; # IntAndere Metamethoden untersuchen den Aufbau eines Typs.
.^attributes führt seine Attribute auf, und
.^find_method sagt Ihnen, ob eine Methode existiert:
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 liefert die method resolution order — die
Kette der Typen, die Raku der Reihe nach durchsucht, wenn es eine
Methode nachschlägt. Sie ist die Vererbungslinie einer Klasse:
class A {}
class B is A {}
say B.^mro.map(*.^name); # (B A Any Mu)B erbt von A, und jeder Typ letztlich von
Any und Mu, ein Methodenaufruf auf einem
B wird also genau entlang dieses Pfads gesucht. Diese
Metamethoden machen den Aufbau Ihrer Typen zu Daten, die Sie zur
Laufzeit abfragen können.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Das Metaobjekt-Protokoll 🆕 | Quiz — Das MOP →
💪 Oder springen Sie direkt zu
den Übungen dieses Abschnitts.