Kurso de Raku / Objektoj, en- kaj eligo kaj escepto / Klasoj kaj objektoj / La metaobjekta protokolo 🆕 / Exercises / Rombo el klasoj
Solvo: Rombo el klasoj
Jen ebla solvo de la tasko.
Kodo
class A {
}
class B is A {
}
class C is A {
}
class D is B is C {
}
say D.^mro.map(*.^name);🦋 Vi povas trovi la fontkodon en la dosiero diamond-mro.raku.
Eligo
(D B C A Any Mu)Komentoj
Dheredas de du patroj samtempe —class D is B is Clistigas ĉiun el ili kun sia proprais. Tio estas multobla heredo, kajA,B,C,Dformas rombon: du vojoj deDsupren al la kunhavata prapatroA..^mroplatigas tiun rombon en unu solan, linian serĉordon.Dvenas unue, poste ĝiaj patrojBkajCen la ordo, en kiu ili estis skribitaj, poste la kunhavataA, kaj fineAnykajMu.Kvankam kaj
BkajCkondukas alA, la tipoAaperas unufoje, kaj nur post ambaŭ. Jen la celo de ordo de metodserĉado: ĉiu tipo estas vizitata ekzakte unufoje, kaj patro neniam venas antaŭ ido, kiu heredas de ĝi — do metodo difinita enBestas ĉiam trovata antaŭ tiu, kiun ĝi superregus enA.