我发现自己经常使用 vars 和 akka actor 来维护状态。例如,如果我的演员需要维护一个项目列表,我可能会执行以下操作:
class ListActor extends Actor{
var xs : List[Int] = List()
def receive = {
case x : Int => xs = x :: xs
}
}
使用可变变量似乎违背了 Scala 的精神。或者我用过这个:
class ListActor2 extends Actor{
import context._
def collect_ints(accu : List[Int]) : Receive = {
case x : Int => become(collect_ints(x :: accu))
}
def receive = collect_ints(Nil)
}
我更喜欢它的外观,但我必须担心堆栈溢出吗?
我知道 FSM 特性并且以前也使用过它,但在某些情况下它似乎太多了。
维护简单状态的推荐方法是什么?还有其他我不知道的选择吗?
另外,如果我发现自己经常需要可变变量,这通常是一个坏信号吗?我没有正确使用演员模型吗?