有一个scala课程(来自coursera反应课程)
class Counter extends Actor { def counter(n: Int): Receive = { case "inc" => context.become(counter(n + 1)) case "get" => sender ! n } def receive = counter(0) }
所有这个actor都是通过inc请求递增计数器并通过get请求返回当前计数器值.我认为context.become会为行为堆栈添加新的行为.所以,如果我添加线
case "dec" => context.unbecome()
它将从堆栈中恢复先前的行为,并且进一步获取请求将返回先前的值.但如果我跑
counter ! "inc" counter ! "inc" counter ! "inc" counter ! "inc" counter ! "dec" counter ! "get"
返回的结果是0但不是我预期的3.有谁可以形容为什么?
您的调用become
放弃了先前的行为,因为第二个参数discardOld的默认值为true.此默认行为旨在避免内存泄漏.