中身を理解せずに見様見真似コード。
import scala.actors._ class Fib extends Actor { def act = { while(true) { receive { case i:Int => { println(i + ":" + fib(i)) } } } } def fib(n:Int):Int ={ n match { case 0 => 1 case 1 => 1 case _ => fib(n - 1) + fib(n - 2) } } } object Main { def main(args: Array[String]) { val f = new Fib() f.start (0 to 10).foreach { c => f ! c } } }
元ねた、アクターモデル - GIOの日記
追記
trait Actor in scala.actorsによると無限ループはexitメソッドで脱出できるようだ。
Concurrency in Erlang & Scala: The Actor Model / Ruben Vermeersch (RubenV)
Actorについては、これが参考になりそう。
書き直し
import scala.actors._ case class Fib(i:Int) class FibActor extends Actor { def act = { while(true) { receive { case Fib(i) => { println(i + ":" + fib(i)) } case Exit => { exit() } } } } def fib(n:Int):Int ={ n match { case 0 => 1 case 1 => 1 case _ => fib(n - 1) + fib(n - 2) } } } object Main { def main(args: Array[String]) { val f = new FibActor() f.start (0 to 10).foreach { c => f ! Fib(c) } f ! Exit } }