这是我所拥有的类的简化:
trait RequiredThings {
val requiredThings: Seq[String]
}
class SimpleCalculator with RequiredThings {
val requiredThings = List("a", "b")
}
class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
self: SimpleCalculator =>
override val requiredThings:List[String] = List("c") ::: self.requiredThings
}
Run Code Online (Sandbox Code Playgroud)
在这个版本中,我使用的是自我类型的注释,但我不是完全肯定的,这是要走的路.我想我可以通过转换requiredThings为一个方法来让它工作,但我想尝试它作为一个领域.
最终解决方案
trait RequiredThings {
def requiredThings: Seq[String]
}
class SimpleCalculator with RequiredThings {
def requiredThings = List("a", "b")
}
class ComplicatedCalculator extends SimpleCalculator with RequiredThings {
override def requiredThings:List[String] = List("c") ::: super.requiredThings
}
Run Code Online (Sandbox Code Playgroud)
是的,尚未实现对通过自我类型"继承"的方法的超级调用.这将很快(稍微)改变.在此期间,您应该使用继承.