作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个scala类(来自coursera reactive类(class))
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 为真。此默认行为旨在避免内存泄漏。
关于scala - 我使用 akka unbecome 有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787698/
有一个scala类(来自coursera reactive类(class)) class Counter extends Actor { def counter(n: Int): Receive
我是一名优秀的程序员,十分优秀!