Scala 什么';我怎么';我用的是akka unbecome
有一个scala课程(来自coursera反应课程) 这个actor所做的就是通过inc请求递增计数器,并通过get请求返回当前计数器值。 我认为context.been会将新行为添加到行为堆栈中。所以如果我加上一行Scala 什么';我怎么';我用的是akka unbecome,scala,akka,Scala,Akka,有一个scala课程(来自coursera反应课程) 这个actor所做的就是通过inc请求递增计数器,并通过get请求返回当前计数器值。 我认为context.been会将新行为添加到行为堆栈中。所以如果我加上一行 case "dec" => context.unbecome() 它将从堆栈中恢复以前的行为,进一步的get请求将返回以前的值。但如果我跑 counter ! "inc" counter ! "inc" counter ! "inc" counter ! "inc"
case "dec" => context.unbecome()
它将从堆栈中恢复以前的行为,进一步的get请求将返回以前的值。但如果我跑
counter ! "inc"
counter ! "inc"
counter ! "inc"
counter ! "inc"
counter ! "dec"
counter ! "get"
返回的结果是0,但不是我预期的3。有人能描述一下原因吗?您对
been
的调用将放弃以前的行为,因为第二个参数的默认值为true。此默认行为旨在避免内存泄漏 哪个呼叫返回0?要从get
获取响应,您应该调用计数器?“get”
注意这里的unbecome
是无用的。您应该使用第二个参数调用been
,或者使用becomestacking
。是的,case“inc”=>context.been(计数器(n+1),false)在没有状态堆栈的情况下取消编译重新安装原始接收行为。
counter ! "inc"
counter ! "inc"
counter ! "inc"
counter ! "inc"
counter ! "dec"
counter ! "get"