在Scala中,我可以覆盖包含列表的具体字段并在子类中附加一些内容吗?

Edw*_*ale 5 scala

这是我所拥有的类的简化:

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)

lin*_*nna 7

是的,尚未实现对通过自我类型"继承"的方法的超级调用.这将很快(稍微)改变.在此期间,您应该使用继承.

  • @Eric:不确定这是否曾经发布在邮件列表上,但我是Scala团队的成员,而且Martin(原则上)已经确定了这样的功能.在此期间,我刚刚陷入其他困境,并且存在一些非常重要的实施问题. (2认同)