小编Ars*_*lev的帖子

Scala中的一般有限状态机(传感器)

在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拓扑也不清楚.

  1. 如何以功能方式创建FSM?

  2. .dot格式绘制FSM图也是非常好的

  3. Akka FSM具有允许将一些数据与状态关联的良好属性,而不仅仅是提供对象名称.这也是值得赞赏的.(但是,Akka FSM并不总是方便使用,因为它是异步的,有时候有点重量级.)

scala state-machine fsm transducer

10
推荐指数
1
解决办法
3534
查看次数

Scala 类型:reflect:如何在运行时找到两种类型的最小上限

我正在使用 Scala 类型系统实现一些表达式。为了确定表达式的类型,if-then-else我需要能够实现以下函数

def leastUpperBound(thenPartType: Type, elsePartType: Type): Type
Run Code Online (Sandbox Code Playgroud)

是否有某个函数scala.reflect._可以执行评估?或者我是否必须使用这些提取器来实现搜索*TypeApi

提前致谢

reflection types scala

0
推荐指数
1
解决办法
180
查看次数

标签 统计

scala ×2

fsm ×1

reflection ×1

state-machine ×1

transducer ×1

types ×1