Scala 构造说明

Explanation of Scala construct

我正忙于对一些遗留 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 => ... 部分。

它被称为 self-type,它表达了将 PerRequestCreator 混合到扩展 Actor.[=18 的东西中的要求=]

它很有用,因为现在您可以在 PerRequestCreator 的定义中使用 Actor 中定义的任何内容,如果您还扩展了 [=],编译器将检查您是否只能扩展 PerRequestCreator 12=].

示例:

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