Scala 什么';我怎么';我用的是akka unbecome

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"

有一个scala课程(来自coursera反应课程)

这个actor所做的就是通过inc请求递增计数器,并通过get请求返回当前计数器值。 我认为context.been会将新行为添加到行为堆栈中。所以如果我加上一行

    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"