Scala Actor
アクターの生成・開始
extends Actor
import actors.Actor class MyActor extends Actor { def act: Unit = { ... } } val myActor = new MyActor myActor.start
actorメソッド
ただちに開始する
import actors.Actor._ val myActor = actor { ... }
メッセージ受信
receive
常にスレッドを使用する
receiveの結果を返せる
val myActor = actor { val rr = receive { case i:Int => println("receive " + i) "Int" } println("receive result " + rr) } myActor ! 1
react
メッセージ処理中のみスレッドを使用する
reactの結果を返せない
val myActor = actor { react { case i:Int => println("react " + i) } } myActor ! 1
loop
受信を繰り返す
val myActor = actor { loop { react { case i:Int => println("loop react " + i) } } } myActor ! 1 myActor ! 2
メッセージ返信
reply
val myActor = actor { react { case i:Int => println("react " + i) reply(i * 2) } } val result = myActor !? 1 println("actor result " + result)
メッセージ送信
! ($bang)
送信のみ
myActor ! 1
!? ($bang$qmark)
送信+返信を待つ
val result = myActor !? 1 println("actor result " + result)
!! ($bang$bang)
送信+返信を待たない
バックグラウンド処理
val myActor = actor { react { case i:Int => (1 to 1000).toArray println("react " + i) reply(i * 2) } } val future = myActor !! 3 println("set " + future.isSet) (1 to 1000000).toArray println("set " + future.isSet) println("actor result " + future())
set false react 3 set true actor result 6
!! ($bang$bang) + PartialFunction
future()のあとにPartialFunctionが呼ばれる
val future = myActor !! (3, { case any => println("partial function " + any) }) future()