Объяснение конструкции Scala - PullRequest
0 голосов
/ 31 мая 2018

Я занят крупной задачей по рефакторингу некоторых устаревших кодов 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 => ... черты.

1 Ответ

0 голосов
/ 31 мая 2018

Это называется 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

...