Perché l'errore è sotto? Come risolverlo?Perché una classe non può estendere tratti con il metodo della stessa firma?
EDIT: Ho assunto che dal momento che A e B compili alle coppie (di interfaccia, di classe), si tratta di scegliere la giusta chiamata al metodo statico da implementare durante la compilazione di C. Mi aspetto che la priorità sia secondo l'ordine.
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: Si noti che in Ruby questo funziona bene:
>> 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
Eccellente! Peccato che se provo 'la classe C estende A con B', l'errore non menziona questo modo di risolvere il conflitto. – IttayD
@IttayD Con Scala 2.10.4: Il messaggio di errore dice come risolvere questo: (Nota: questo può essere risolto dichiarando un override nella classe C.) la classe C estende A con B { –