Raku kurss / Objekti, ievade/izvade un izņēmumi / Klases un objekti / Metaobjektu protokols 🆕 / Exercises / Klašu rombs
Risinājums: Klašu rombs
Šeit ir iespējams risinājums uzdevumam.
Kods
class A {
}
class B is A {
}
class C is A {
}
class D is B is C {
}
say D.^mro.map(*.^name);🦋 Atrodiet programmu failā diamond-mro.raku.
Izvade
(D B C A Any Mu)Komentāri
Dmanto uzreiz no divām vecākklasēm —class D is B is Ckatru no tām uzskaita ar savuis. Tā ir daudzkārtēja mantošana, unA,B,C,Dveido rombu: divi ceļi noDaugšup līdz kopīgajam priekštecimA..^mrošo rombu saplacina vienā, lineārā meklēšanas secībā. Vispirms nākD, tad tā vecākklasesBunCtādā secībā, kādā tās uzrakstītas, tad kopīgaisAun visbeidzotAnyunMu.Lai gan gan
B, ganCved uzA, tipsAparādās vienreiz, un tikai pēc abiem. Tā ir metožu atrisināšanas secības jēga: katrs tips tiek apmeklēts tieši vienu reizi, un vecākklase nekad nenāk pirms bērnklases, kas no tās manto, — tāpēc metode, kas definētaB, vienmēr tiek atrasta pirms tās, ko tā pārrakstītuA.