Каков общий способ реализации конечного автомата (или преобразователя конечного состояния) в Scala?
Я часто нуждаюсь в реализации государственного аппарата. Моя типичная реализация выглядит как
object TypicalFSM { // actually — finite state transducer
type State
case object State1 extends State
case object State2 extends State
type Message
case object Message1 extends Message
type ResultMessage
case object ResultMessage1 extends ResultMessage
}
import TypicalFSM._
class TypicalFSM extends ((Message) =>Seq[ResultMessage]){
var state:State = State1
def apply(message:Message):Seq[ResultMessage] = (state, message) match {
case (State1, Message1) =>
state = State2
Seq(ResultMessage1, ResultMessage2)
}
}
То, что мне не нравится, - это изменяемый var
, который делает поток решений небезопасным. Также топология FSM не ясна.
-
Как создать FSM в функциональном режиме?
-
Также было бы неплохо нарисовать FSM-граф в . dot format
-
Akka FSM обладает хорошим свойством разрешать ассоциировать некоторые данные с состоянием, не только указывая имя объекта. Это также приветствуется. (Тем не менее, Akka FSM не всегда удобно использовать, поскольку он асинхронный и иногда немного тяжелый.)