Scala自我类型特征和超类型的调用方法

时间:2014-12-05 22:18:43

标签: scala traits

假设我有一个这样的课程

class Job(args:String) {

  def config:Map[String,String] = ...

}

我想创建一个可以与此类混合使用的特征,以添加更多配置选项。所以我做了类似的事情

trait ExtraConfig { self:Job =>

  override def config = self.config ++ Map("extra","config")
}

不幸的是,这并没有编译,因为self.config变为自递归。

我试过

trait  ExtraConfig  extends Job {}

但是工作正在采用构造函数参数,我不知道如何通过它。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您正在寻找abstract override修饰符,但要使用它,您需要显式扩展Job类,然后在您的特性中,您可以使用超类的成员:

class Job(args:String) {
  def config:Map[String,String] = Map.empty
}

trait ExtraConfig extends Job {
  abstract override def config =
    super.config ++ Map("extra" -> "config")
}

val job = new Job("name") with ExtraConfig