【发布时间】:2011-10-14 13:05:00
【问题描述】:
我正在尝试创建一个特征,当混入该特征时,它将用调用原始方法然后操作结果的方法替换方法的默认定义。
这是我想要做的:
class Foo {
def bar() : String = "Foos bar"
}
trait OtherStuff {
self : Foo =>
def bar() : String = self.bar() + " with OtherStuff"
}
class Quux extends Foo with OtherStuff
如果这按我想要的方式工作,那么 (new Quux).bar 现在将返回 Foos bar with OtherStuff。不幸的是,它不起作用 - 我得到的是:
<console>:6: error: error overriding method bar in class Foo of type ()String;
method bar in trait OtherStuff of type ()String needs `override' modifier
class Quux extends Foo with OtherStuff
但是如果我在定义OtherStuff 时使用override,我会得到:
<console>:7: error: method bar overrides nothing
override def bar() : String = self.bar() + " with OtherStuff"
是否可以使用 trait 覆盖自类型中的方法?如果没有,是否会将OtherStuff 更改为extends Foo 而不是具有Foo 自我类型的特征,对所有存在的代码做任何不好的事情,比如
class WhatEver extends Foo with Xyz with Pqr with OtherStuff with Abc
我在 scala 2.7.7 中工作,因为这是一个 sbt 构建规则,我们还没有将我们的 sbt 项目升级到 0.10.x 版本。 (我们依赖的插件还没有准备好)
【问题讨论】: