Curso de Raku / Objetos, entrada/salida y excepciones / Clases y objetos / El protocolo de metaobjetos 🆕 / Exercises / Un rombo de clases
Solución: Un rombo de clases
Aquí tienes una posible solución para la tarea.
Código
class A {
}
class B is A {
}
class C is A {
}
class D is B is C {
}
say D.^mro.map(*.^name);🦋 Puedes encontrar el código fuente en el archivo diamond-mro.raku.
Salida
(D B C A Any Mu)Comentarios
Dhereda de dos padres a la vez:class D is B is Cenumera cada uno con su propiois. Esto es herencia múltiple, yA,B,C,Dforman un rombo: dos caminos desdeDhasta el antepasado comúnA..^mroaplana ese rombo en un único orden de búsqueda lineal. Primero vaD, después sus padresByCen el orden en que se escribieron, después el comúnAy por últimoAnyyMu.Aunque tanto
BcomoCllevan aA, el tipoAaparece una sola vez, y solo después de ambos. Ese es el sentido de un orden de resolución de métodos: cada tipo se visita exactamente una vez, y un padre nunca va antes que una hija que hereda de él, de modo que un método definido enBse encuentra siempre antes que el que sobrescribiría enA.