是一种方法,内部监控的阿卡FSM过渡到第一状态?

问题描述 投票:4回答:1

考虑到开始于空闲状态的FSM演员

startWith(Idle, IdleData)

我想监控过渡到这个第一状态(从没有一个国家?)

我试过了

onTransition {
    case _ -> Idle => // Wasn't called
}

据相关FSM文档:

另外,也可以通过一个函数对象接受两种状态onTransition,在情况下,你过渡处理逻辑被作为一种方法实现的:

onTransition(handler _)

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

鉴于从类型StateType而不是选项[StateType]我认为这是不可能的,但也许我失去了一些东西。

scala akka
1个回答
0
投票

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

如果我没有理解你的问题,这是当你从初始状态开始你的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的过渡。

在当我们开始,我们可以看到一个输出Initial transition打印的FSM上述情况下,你可以利用这个做更多复杂的东西,按您的需求

所以基本上,如果你更新从case _ => Idle现有的过渡到case Idle -> Idle它应该工作

注意:有可能做到这一点的方法不止一种,我也还在探索,所以我的答案是仅仅有得到这个的一种可能方式阿卡FSM的力量。

© www.soinside.com 2019 - 2024. All rights reserved.