2016-09-19 73 views
1

Scala中Actor性狀像這樣定義,重寫Supervisorstrategy作爲混凝土演員一個VAL

/** 
* 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

是否因爲內存方面的考慮,就像我們不需要每次調用該方法時進行此評估一樣?

+1

看看[這裏](http://stackoverflow.com/questions/19642053/when-to-use-val-or-def-in-scala-traits)。 –

回答

1

因此,首先升級一個scala trait是一個保留我們知道通常需要覆蓋的抽象定義的地方。因此,將方法定義爲val確實毫無意義,除非該方法意圖由該trait的所有具體擴展名調用。

通常當我們使用def方法擴展trait時,我們已打開所有選項。也就是說,我們可以將其覆蓋爲defvallazy val。 選擇取決於用例更頻繁。 在這種情況下,我們不希望每次從akka子系統調用superVisorStrategy方法時都要更改主管策略。所以一旦方法執行完畢,我們希望保留未來的價值,從而節省一些內存。 因此在大多數例子中它被定義爲vallazy val