如果特质以自我开头意味着什么:演员
What does it mean if trait starts with self: Actor
我不是一个很好的 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 class 的依赖关系,这意味着任何扩展 ActorTracing
的 class 也应该扩展 Actor
。这基本上建立在 Scala 中的 DI 和 Cake 模式之上,这是构建软件层的想法。
所以在这个例子中,它基本上是说 ActorTracing
不能用于任何不扩展 Actor
的东西
这是一篇关于此的非常好的文章。
http://jonasboner.com/real-world-scala-dependency-injection-di/
我不是一个很好的 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 class 的依赖关系,这意味着任何扩展 ActorTracing
的 class 也应该扩展 Actor
。这基本上建立在 Scala 中的 DI 和 Cake 模式之上,这是构建软件层的想法。
所以在这个例子中,它基本上是说 ActorTracing
不能用于任何不扩展 Actor
这是一篇关于此的非常好的文章。 http://jonasboner.com/real-world-scala-dependency-injection-di/