2017-02-05 4 views
0

私はActorLogging hereを見て、この構文に出くわした:スカラエンクロージャとは何ですか?

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-between-braces-and-parentheses-and-when) – zhelezoglo

答えて

-1

akkaのreceiveメソッドでは、結果の型としてReceiveが必要です。 Scalaで

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

たちは構文糖構造を持っているので、代わりに呼び出す:あなたは簡単に書くことができ

LoggingReceive.apply(...) 

ので、ここで彼らはapply次のように定義されたメソッドを持つオブジェクトLoggingReceiveを使用しています:

LoggingReceive(...) 

別のものがあります - Scalaで我々は{...}括弧の代わり(...)括弧ので、使用することができますだから、最後に、彼らは単にwithLabel()メソッドを呼び出すLoggingReceiveapply方法でreceiveメソッドをラップしている

LoggingReceive{...} 

:表現上のように書くことができます。

+0

これは、実際に元のポスターが探していた機能を説明していません。実際の説明については、http://stackoverflow.com/questions/4386127/what-is-the-formal-difference-in-scala-between-braces-and-parentheses-and-whenを参照してください。答えの「関数/部分関数リテラルの大文字小文字の区別」を参照してください。 – jrudolph

関連する問題