我正忙于对一些遗留 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
.
它很有用,因为现在您可以使用 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
关于scala - Scala 构造说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50620109/