scala - 如果特质以 self : Actor 开头,这意味着什么

标签 scala function traits

我不是一个很好的 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/

相关文章:

language-agnostic - 特质和多重继承之间有什么概念上的区别?

java - Lombok @EqualsAndHashCode 与 Scala - 案例类不能继承 Java 类

scala - 展平集合映射

c++ - 类循环

sql - 将函数移动到另一个模式

scala 扩展特征,方法返回各种类型,类型不匹配

scala - 在 scala 中模拟会生成 java.lang.NoSuchMethodException

scala - 如何将 Scalding TypedPipe 转换为 Iterator

function - Lua 函数——一个简单的误会

c++ - 按特征类专门化功能