考虑从状态空闲开始的 FSM Actor

startWith(Idle, IdleData)

我想监视到第一个状态的转换(从无状态?)

我试过了
onTransition {
    case _ -> Idle => // Wasn't called
}

根据相关的 FSM 文档:


onTransition(handler _)

def handler(from: StateType, to: StateType) {
  // handle it here ...
}

鉴于 from 类型是 StateType 而不是 Option[StateType] 我认为这可能是不可能的,但也许我错过了一些东西。

最佳答案

我最近正在寻找类似的东西。

如果我正确理解您的问题,以下是一种监视何时从初始状态启动 FSM 的方法:

class ExampleFSM extends Actor with FSM[State, Data] {
  // A FSM begins its existence in Idle state and can move to different states
  startWith(Idle, NoData)

  when(Idle) {
    case Event(SetData(something), NoData) =>
      goto(SomeOtherState) using Data(something)
  }

  onTransition {
    case Idle -> Idle =>
      stateData match {
        case _ =>
          println("Initial transition")
      }
  }
}

在上面的例子中,当我们实例化 FSM 传入消息 SetData(something) 时,它​​从状态 Idle 开始,并且有一个你可以监控的转换是 Idle -> Idle

在上述情况下,当我们启动 FSM 时,我们可以看到输出 Initial transition 打印出来,您可以根据需要利用它来做更复杂的事情

所以基本上如果你更新你现有的从 case _ => Idlecase Idle -> Idle 的转换,它应该可以工作

注意:可能有不止一种方法可以做到这一点,我还在探索 Akka FSM 的强大功能,所以我的答案只是有一种可能的方法来实现这一点。

关于scala - 是一种在 Akka FSM 中内部监控到第一个状态的转换的方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33311614/

10-11 08:52