考虑从状态空闲开始的 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 _ => Idle
到 case Idle -> Idle
的转换,它应该可以工作注意:可能有不止一种方法可以做到这一点,我还在探索 Akka FSM 的强大功能,所以我的答案只是有一种可能的方法来实现这一点。
关于scala - 是一种在 Akka FSM 中内部监控到第一个状态的转换的方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33311614/