스칼라에서 유한 상태 기계 (또는 유한 상태 변환기)를 구현하는 일반적인 방법은 무엇입니까?스칼라의 일반적인 유한 상태 기계 (변환기)
종종 나는 상태 머신 구현을 필요로합니다. 내가 싫어하는 것은 솔루션 스레드가 안전하지 않은하게 변경할 수 var
입니다
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)
}
}
처럼 내 전형적인 구현 보인다. 또한 FSM 토폴로지가 명확하지 않습니다.
FSM을 기능적으로 만드는 방법은 무엇입니까?
또한 아주 좋은 것은 .dot format
Akka FSM뿐만 아니라 객체 이름을주는 국가로 일부 데이터를 연결할 수의 좋은 특성을 가지고에 FSM-그래프를 그립니다. 이것도 인정합니다. 이 당신을 위해 무엇을 찾고있는 아마하지
FSM은 상호 재귀 적 기능으로 표현할 때 아름답습니다. 진짜 꼬리 호출은 거기서 중요하다. 그래서 Scala는 그것을 잘라 내지 않을 것이다. 당신의'var'을 피하기 위해서, 메세지들과 함께 다음 상태를 리턴하고, 그 함수를 계속 먹이십시오. 당신은 효과적으로'State' 타입을 만들고 있습니다. –
Akka 프레임 워크는 유용한 상태 시스템 구현을 가지고 있지만 액터 시스템을 중심으로 메시지를 보내는 것에 의존합니다. 자세한 내용 [여기] (http://doc.akka.io/docs/akka/2.2.3/scala/fsm.html) –