scala/ScalaBook/chapter-07/actors5.scala.orig
import scala.actors.Actor
import scala.actors.Actor._
case class Val(a: Actor, n: Int)
class Fact extends Actor {
def act =
receive {
case Val(a,n) if n > 0 =>
println(n)
var p = new Fact
p ! Val(self,n-1)
receive { case Val(_, m) => a ! Val(a, n*m) }
}
}
object actorsExample {
def main(args: Array[String]) {
var factorial = actor {
receive {
case Val(a,0) => a ! Val(a, 1)
case Val(a,n) =>
var q = new Fact
q ! Val(self,n)
receive { case Val(_,f) => a ! Val(a,f) }
}
}
factorial ! Val(self,3)
self.receive { case Val(_, n) => println(n) }
}
}