1

ScalaのActortrait は次のように定義されています。

/**
* User overridable definition the strategy to use for supervising
* child actors.
*/
def supervisorStrategy: SupervisorStrategy = SupervisorStrategy.defaultStrategy

ただし、具体的なアクターのすべてのサンプルコードは次のように定義されていることがわかります。

override val supervisorStrategy = OneForOneStrategy(loggingEnabled = false) {
    ...
  }

私が理解しようとしているのは、なぜ supervisorStrategyオーバーライドされているのvalですか?
としてオーバーライドしてみませんdefか?

メソッドが呼び出されるたびにこの評価が必要ないように、メモリの考慮事項のためですか?

4

1 に答える 1

1

したがって、まず最初に、scalatraitは、一般にオーバーライドが必要になることがわかっている抽象的な定義を保持する場所です。valしたがって、メソッドが のすべての具体的な拡張によって呼び出されることを意図している場合を除いて、メソッドを として定義しても意味がありませんtrait

通常、メソッドで a を拡張するtraitと、defすべてのオプションが open になります。defつまり、 a 、 avalまたは aとしてオーバーライドできますlazy val。選択は、より頻繁にユースケースに依存します。superVisorStrategyこの場合、メソッドが akka サブシステムから呼び出されるたびにスーパーバイザー戦略が変更されるとは考えていません。したがって、メソッドが実行されたら、将来のために値を保持して、メモリを節約したいと考えています。したがって、ほとんどの例ではavalまたは aとして定義されています。lazy val

于 2016-09-19T07:40:28.653 に答える