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