Что значит, если черта начинается с себя: Актер

Я не совсем хороший программист на 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 =>... Что бы это значило здесь, в этом примере?


person user3663882    schedule 23.08.2016    source источник
comment
Может быть продублировано: stackoverflow.com/questions/10291176/   -  person pianista    schedule 23.08.2016


Ответы (1)


Он определяет зависимость класса Актера, что означает, что любой класс, который расширяет ActorTracing, также должен расширять Actor. Это в основном основано на DI и шаблоне Cake в Scala, который представляет собой идею создания слоев программного обеспечения.

Таким образом, в этом примере в основном говорится, что ActorTracing нельзя использовать ни с чем, что также не расширяет Actor.

Вот действительно хорошая статья об этом. http://jonasboner.com/real-world-scala-dependency-injection-di/

person Stephen Carman    schedule 23.08.2016
comment
Обратите внимание, что любая черта, которая расширяет ActorTracing, также должна расширять Актера, это неправильно, любая class, которая расширяет эту черту, также должна расширять Actor, trait не обязательно. - person Ende Neu; 23.08.2016