我有一个不断更新值的程序。我希望能够定期查询当前值的操作。在我的特定示例中,每次更新都可以视为一种改进,并且该过程最终将收敛到最终的最佳答案,但我想要/需要访问中间结果。循环执行的速度和收敛所需的时间很重要。
例如,考虑这个循环:
var current = 0
while(current < 100){
current = current + 1
}
我希望能够在任何循环迭代中获得电流值。
使用 Actor 的解决方案是:
class UpdatingActor extends Actor{
var current : Int = 0
def receive = {
case Update => {
current = current + 1
if (current < 100) self ! Update
}
case Query => sender ! current
}
}
您可以使用 become 或 FSM 摆脱 var,但这个示例更清楚 IMO。
或者,一个参与者可以运行操作并将每次循环迭代的更新结果发送给另一个参与者,后者的唯一职责是更新值并响应有关它的查询。我对 Akka 中的“代理”了解不多,但这似乎是一个潜在的用例。
使用 Scala 有哪些更好/替代的方法?我不需要使用演员;这只是我想到的一种解决方案。