我不是一个很好的 Scala 程序员,需要一些帮助来理解语法。这是trait我正在努力解决:
trait ActorTracing extends AroundReceiveOverrideHack { self: Actor =>
protected def serviceName: String =
this.getClass.getSimpleName
implicit def any2response[T](msg: T): ResponseTracingSupport[T] =
new ResponseTracingSupport(msg)
implicit lazy val trace: TracingExtensionImpl =
TracingExtension(context.system)
override protected final def aroundReceiveInt(receive: Receive, msg: Any): Unit =
msg match {
case ts: BaseTracingSupport if receive.isDefinedAt(msg) =>
trace.start(ts, serviceName)
case _ =>
}
}
特征的主体似乎以 Function1
文字开头。 self:Actor =>
...在此示例中这意味着什么?
最佳答案
它定义了 Actor 类的依赖关系,这意味着任何扩展 ActorTracing
的类也应该扩展 Actor
。这基本上建立在 Scala 中的 DI 和 Cake 模式之上,这是构建软件层的想法。
因此,在这个示例中,基本上是说 ActorTracing
不能用于任何不扩展 Actor
的东西
这是一篇关于此的非常好的文章。 http://jonasboner.com/real-world-scala-dependency-injection-di/
关于scala - 如果特质以 self : Actor 开头,这意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39101417/