Scala结构的解释

Scala结构的解释,scala,self-type,Scala,Self Type,我正忙于一些遗留Scala/Akka代码的一项重大重构任务,并被一个我无法解释的构造所困扰,这妨碍了我的工作: trait PerRequestCreator { this: Actor => def perRequest(<some_params>): ActorRef = { body of function } } trait PerRequestCreator{ 这个:Actor=> def perRequest():ActorRef={函数体} } 然后将

我正忙于一些遗留Scala/Akka代码的一项重大重构任务,并被一个我无法解释的构造所困扰,这妨碍了我的工作:

trait PerRequestCreator {
  this: Actor =>
  def perRequest(<some_params>): ActorRef = { body of function }
}
trait PerRequestCreator{
这个:Actor=>
def perRequest():ActorRef={函数体}
}
然后将其用作:

class SomeActor extends PerRequestCreator with Actor {
  def processRequest: Route = {
    perRequest(<some_params_passed>)
  }
}
class SomeActor使用Actor扩展PerRequestCreator{
def processRequest:路由={
perRequest()
}
}
我很难理解这个特性的
部分:Actor=>…

它被称为self type,它表达了
PerRequestCreator
被混合到扩展
Actor
的东西中的要求

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

例如:

class SomeClass extends PerRequestCreator            // this won't compile
class SomeClass extends PerRequestCreator with Actor // this is ok
您可以在此处阅读更多信息: