2016-09-19 2 views
1

Actor形質がそのようにように定義されている具体的な俳優にヴァルとしてSupervisorstrategyオーバーライドは、Scalaで

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

iは次のように具体的な俳優のすべてのサンプル・コードが定義されていることを確認しかし、

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

私が理解しようとしているのは、なぜsupervisorStrategyvalとして上書きされているのですか?
defとして無効にしてみませんか?

私たちがメソッドが呼び出されるたびにこの評価が欲しくないような記憶上の考慮事項ですか?

+1

[こちら](http://stackoverflow.com/questions/19642053/when-to-use-valor-def-in-scala-traits)をご覧ください。 –

答えて

1

最初にスカラを入力してくださいtraitは、われわれが一般的にオーバーライドする必要がある抽象定義を保持する場所です。したがって、メソッドがvalと定義されている点はありませんが、そのメソッドがそのすべての具体的な拡張子であるtraitによって呼び出される場合を除きます。通常

、我々はオープン、すべてのオプションを持っているdef方法でtraitを拡張します。つまり、defval、またはlazy valとして上書きできます。 選択肢は、ユースケースによって異なります。 この場合、superVisorStrategyメソッドがakkaサブシステムから呼び出されるたびにスーパーバイザー戦略が変更されるとは限りません。だから、このメソッドが実行されると、私たちは未来の価値を保持して、いくらかの記憶を節約したいと考えています。 したがって、多くの例ではvalまたはlazy valと定義されています。