Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti / Il protocollo dei metaoggetti 🆕 / Exercises / Un rombo di classi
Soluzione: Un rombo di classi
Ecco una possibile soluzione del compito.
Codice
class A {
}
class B is A {
}
class C is A {
}
class D is B is C {
}
say D.^mro.map(*.^name);🦋 Trova il programma nel file diamond-mro.raku.
Output
(D B C A Any Mu)Commenti
Deredita da due genitori in una volta sola —class D is B is Cli elenca ciascuno con il propriois. Questa è ereditarietà multipla, eA,B,C,Dformano un rombo: due percorsi daDfino all’antenato comuneA..^mroappiattisce quel rombo in un unico ordine di ricerca lineare. Viene primaD, poi i suoi genitoriBeCnell’ordine in cui sono stati scritti, poi il comuneAe infineAnyeMu.Anche se sia
BsiaCportano adA, il tipoAcompare una volta sola, e solo dopo entrambi. È questo il senso di un ordine di risoluzione dei metodi: ogni tipo viene visitato esattamente una volta, e un genitore non viene mai prima di una figlia che ne eredita — così un metodo definito inBviene sempre trovato prima di quello che sovrascriverebbe inA.