Scala构造的解释

时间:2018-05-31 08:41:11

标签: scala self-type

我正忙于对一些遗留的Scala / Akka代码进行重大的重构任务,而且我被一个我无法解释的构造所困扰,这妨碍了我的努力:

trait PerRequestCreator {
  this: Actor =>
  def perRequest(<some_params>): ActorRef = { body of function }
}

然后使用它:

class SomeActor extends PerRequestCreator with Actor {
  def processRequest: Route = {
    perRequest(<some_params_passed>)
  }
}

我无法理解特质的this: Actor => ...部分。

1 个答案:

答案 0 :(得分:6)

它被称为自我类型,它表示要求将PerRequestCreator混合到扩展Actor的内容中。

这很有用,因为现在你可以在Actor的定义中使用PerRequestCreator中定义的任何内容,编译器会检查你是否只能扩展PerRequestCreator Actor }。

示例:

class SomeClass extends PerRequestCreator            // this won't compile
class SomeClass extends PerRequestCreator with Actor // this is ok

您可以在此处详细了解:https://docs.scala-lang.org/tour/self-types.html