Почему я получаю ошибку ниже? Как обойти это?
Я предположил, что, поскольку A и B компилируются в пары (interface, class), это вопрос выбора правильного статического вызова метода для реализации при компиляции C. Я ожидал бы, что приоритет будет соответствовать порядку.
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
<console>: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") }
<console>:4: error: method hi overrides nothing
trait A {override def hi = println("A")}
Обратите внимание, что в Ruby это работает хорошо:
>> 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:0xb7c51068>
>> c.hi
B
=> nil