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" } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |