3
このコードでakka Actorのreceiveメソッドがvalのように動作するのはなぜですか?なぜakkaのActorメソッドがvalのように振る舞いますか?
import akka.actor.{ ActorRef, ActorSystem, Props, Actor }
import scala.concurrent.duration._
// Define Actor Messages
case class WhoToGreet(who: String)
// Define Greeter Actor
class Greeter extends Actor {
def receive = {
println("in receive")
receiveHandler
}
def receiveHandler: Receive = {
case WhoToGreet(who) => println(s"Hello $who")
}
}
object HelloAkkaScala extends App {
// Create the 'hello akka' actor system
val system = ActorSystem("Hello-Akka")
// Create the 'greeter' actor
val greeter = system.actorOf(Props[Greeter], "greeter")
// Send WhoToGreet Message to actor
greeter ! WhoToGreet("Akka")
greeter ! WhoToGreet("Akka")
greeter ! WhoToGreet("Akka")
//shutdown actorsystem
system.terminate()
}
出力:
in receive
Hello Akka
Hello Akka
Hello Akka
あることが想定される。受信しながら
in receive
Hello Akka
in receive
Hello Akka
in receive
Hello Akka
はDEFです。
この動作については、ここのdefがなぜvalのように計算されるのですか?
ありがとうございますが、この[code](https://www.jdoodle.com/embed/v0/scala/2.12.0/14e)ではなぜdefのように動作しますか? – SaKou
あなたがリンクしたコードは、PartialFunctionsとはまったく無関係です。戻り値の型をUnitに変更することで、これを証明できます。メソッドは、PartialFunctionの外部で副作用(printlns)を実行します。 Akkaは(キャッシュされた)PartialFunctionを呼び出します。 –
上記のコードを参考にしてください。パーシャルタイプをPartial = PartialFunction [Any、Unit]に変更しました 違いが表示されません – SaKou