¿Por qué es el error a continuación? ¿Cómo solucionarlo?¿Por qué una clase no puede extender rasgos con el método de la misma firma?
EDITAR: Asumí que como A y B se compilan para pares de (interfaz, clase), es una cuestión de elegir la llamada a método estático correcta para implementar al compilar C. Esperaría que la prioridad fuera según el orden.
scala> trait A {def hi = println("A")} defined trait A scala> trait B {def hi = println("B")} defined trait B scala> class C extends B with A :6: error: error overriding method hi in trait B of type => Unit; method hi in trait A of type => Unit needs `override' modifier class C extends B with A scala> trait A {override def hi = println("A")} :4: error: method hi overrides nothing trait A {override def hi = println("A")}
EDIT: tenga en cuenta que en Ruby esto funciona así:
>> module B; def hi; puts 'B'; end; end => nil >> module A; def hi; puts 'A'; end; end => nil >> class C; include A; include B; end => C >> c = C.new => # >> c.hi B => nil
¡Excelente! Lástima que si intento 'la clase C amplía A con B', el error no menciona esta manera de resolver el conflicto. – IttayD
@IttayD con Scala 2.10.4: El mensaje de error dice cómo resolver esto: (Nota: esto se puede resolver al declarar una anulación en la clase C.) clase C extiende A con B { –