scala – 为什么类不能用相同签名的方法扩展traits?
发布时间:2020-12-16 09:47:31 所属栏目:安全 来源:网络整理
导读:为什么会出现以下错误?如何解决它? 编辑:我假设,因为A和B编译为(接口,类)对,这是一个问题选择正确的静态方法调用实现时编译C.我期望的优先级是根据顺序。 scala trait A {def hi = println("A")}defined trait Ascala trait B {def hi = println("B")}
|
为什么会出现以下错误?如何解决它?
编辑:我假设,因为A和B编译为(接口,类)对,这是一个问题选择正确的静态方法调用实现时编译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 解决方法
这对我来说在2.8和2.11,并将允许你是非侵入性的A或B:
trait A { def hi = println("A") }
trait B { def hi = println("B") }
class C extends A with B {
override def hi = super[B].hi
def howdy = super[A].hi // if you still want A#hi available
}
object App extends Application {
(new C).hi // prints "B"
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
