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