scala/ScalaBook/chapter-07/actors7.scala
import scala.actors.Actor
import scala.actors.Actor._
case class InitVal(a: Actor, n: Int)
case class Val(a: Actor, n: Int, m: Int)
object actorsExample {
def main(args: Array[String]) {
val loopActor = actor {
var ResActor : Actor = null
loop{
react {
case Val(_,acc,1) =>
ResActor ! acc
exit("done")
case Val(a,1,count) =>
ResActor = a
self ! Val(self,count,count-1)
case Val(a,acc,count) =>
self ! Val(self,acc*count,count-1)
}
}
}
var factorial = actor {
react {
case InitVal(a,0) => a ! InitVal(a, 1)
case InitVal(a,1) => a ! InitVal(a, 1)
case InitVal(a,n) =>
loopActor ! Val(self,1,n)
react { case f: Int => a ! InitVal(a,f) }
}
}
factorial ! InitVal(self,6)
receive { case InitVal(_, n) => println(n) }
}
}