在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)
}
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢的是可变性var使得解决方案线程不安全.FSM拓扑也不清楚.
如何以功能方式创建FSM?
以.dot格式绘制FSM图也是非常好的
Akka FSM具有允许将一些数据与状态关联的良好属性,而不仅仅是提供对象名称.这也是值得赞赏的.(但是,Akka FSM并不总是方便使用,因为它是异步的,有时候有点重量级.)
我正在使用 Scala 类型系统实现一些表达式。为了确定表达式的类型,if-then-else我需要能够实现以下函数
def leastUpperBound(thenPartType: Type, elsePartType: Type): Type
Run Code Online (Sandbox Code Playgroud)
是否有某个函数scala.reflect._可以执行评估?或者我是否必须使用这些提取器来实现搜索*TypeApi?
提前致谢