2017-01-09 10 views
2

Akka docsはメソッドとしてActorのreceiveを呼び出します。しかし、APIごとに抽象メソッドではなく抽象型メンバーです。受信する理由はどれもメソッドと呼ばれますか?受信がメソッドと呼ばれるのはなぜですか?

+3

あなたはもっと具体的になりますか?どのクラスから受け取りますか?おそらくあなたが指しているakkaドキュメントへのリンク? – pedrorijo91

答えて

3

ええ、ドキュメントを少し改善することができました。

Actor traitを調べると、確かにreceiveがメソッドであることがわかります。署名の中のActor.Receiveは、あなたが参照しているタイプメンバで、Actor objectで定義されています。

したがって、receiveは、すべてのアクタが実装する必要がある抽象メソッドです。そのタイプは部分的な機能です。大文字と小文字が混在するため、簡単に分かります。

def receive = { 
    case "test" => log.info("received test") 
    case _  => log.info("received unknown message") 
} 

各ケースステートメントはAnyを受け取り、Unitを返し、そう部分関数の実際の型は、PartialFunction[Any, Unit]あります。明快さと簡潔さのために、Akkaの人々は、特定のタイプのプレースホルダを作成することを決めました。それはReceiveと呼ばれ、Actorコンパニオンオブジェクトに入れました。

小規模なディグリー:多くの人々はメッセージタイプがAnyであることに本当に満足していないし、Akkaの人々は型付きメッセージを導入すると約束している。彼らはまだ最新のリリースでそれを配信したかどうかは分かりません。

+1

型付きメッセージについては、[Akka Typed](http://doc.akka.io/docs/akka/current/scala/typed.html)機能は利用可能ですが、最近のリリースではまだ実験中です。 –

+0

おかげで、ありがとう。 – slouc

関連する問題