Raku-Kurs / Objekte, Ein- und Ausgabe und Ausnahmen / Klassen und Objekte / Das Metaobjekt-Protokoll 🆕 / Exercises / Ein Diamant aus Klassen
Lösung: Ein Diamant aus Klassen
Hier ist eine mögliche Lösung der Aufgabe.
Code
class A {
}
class B is A {
}
class C is A {
}
class D is B is C {
}
say D.^mro.map(*.^name);🦋 Du findest den Quellcode in der Datei diamond-mro.raku.
Ausgabe
(D B C A Any Mu)Kommentare
Derbt von zwei Eltern zugleich —class D is B is Cführt jeden mit eigenemisauf. Das ist Mehrfachvererbung, undA,B,C,Dbilden eine Raute: zwei Wege vonDhinauf zum gemeinsamen VorfahrenA..^mroplättet diese Raute zu einer einzigen, linearen Suchreihenfolge.Dkommt zuerst, dann seine ElternBundCin der geschriebenen Reihenfolge, dann das gemeinsameAund schließlichAnyundMu.Obwohl sowohl
Bals auchCzuAführen, erscheint der TypAeinmal, und zwar erst nach beiden. Genau darum geht es bei einer method resolution order: Jeder Typ wird genau einmal besucht, und ein Elternteil kommt nie vor einem Kind, das von ihm erbt — eine inBdefinierte Methode wird also immer vor derjenigen gefunden, die sie inAüberschreiben würde.