Альтернативы использованию «вар» для государства с актерами?
Я часто использую переменные с актерами Акки, чтобы поддерживать состояние. Например, если мне нужно, чтобы мой актер вел список предметов, я мог бы сделать что-то вроде:
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 и использовал ее и раньше, но для некоторых ситуаций это кажется слишком большим.
Каков рекомендуемый способ поддержания простого состояния? Есть ли другие альтернативы, о которых я не знаю?
Кроме того, это вообще плохой признак, если мне часто нужны изменяемые переменные? Я не использую модель актера должным образом?