2017-02-05 43 views
0

我看着ActorLogging here和跨越這句法來了:scala外殼是什麼意思?

def receive = LoggingReceive { 
    case x => ... 
} 

是什麼語法SomeName { }是什麼意思?我知道,在斯卡拉{}創建一個語句塊和最後一行被分配的變量。這些評論把它解釋爲:

裹在一個伐木外殼

接收部分功能是否有一個技術術語,它讓我可以瞭解它的用法的? 注意:我知道部分函數是什麼。從評論和答案我明白,LoggingReceive返回一個部分函數和apply的語法。

+0

[在Scala中使用部分函數 - 它如何工作?](http://stackoverflow.com/questions/8650549/using-partial-functions-in-scala-how-does-it-work) – zhelezoglo

+0

另請閱讀:[Scala中括號和括號之間的正式差異,以及何時應該使用它們?](http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in -scala-brackles-and-brackheses-and-when) – zhelezoglo

回答

-1

在akka中,receive方法必須具有Receive作爲結果類型。所以在這裏,他們正在使用的有這樣定義的apply方法的對象LoggingReceive

def apply(r: Receive)(implicit context: ActorContext): Receive = withLabel(null)(r) 

在Scala中,我們有一個語法糖結構等等,而不是調用:

LoggingReceive.apply(...) 

你可以簡單的寫:

LoggingReceive(...) 

還有另外一件事 - 在Scala中我們可以使用{...}括號而非(...)括號,所以上述表達式可以寫爲:

LoggingReceive{...} 

所以最終他們只是簡單地包裝receive法的LoggingReceiveapply方法,它調用的方法withLabel()

+0

這實際上並不能解釋原始海報尋找的功能。請參閱http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-當真正的解釋。請參閱答案的「函數/部分函數文字與案例」部分。 – jrudolph