Почему класс не может расширять черты с помощью метода с той же сигнатурой?
Почему ошибка ниже? Как обойти это?
РЕДАКТИРОВАТЬ: я предположил, что, поскольку 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 :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")}
РЕДАКТИРОВАТЬ: обратите внимание, что в 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.hi B => nil