Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 一些演员信息缺失——AKKA FSM_Scala_Akka_Fsm_State Machine - Fatal编程技术网

Scala 一些演员信息缺失——AKKA FSM

Scala 一些演员信息缺失——AKKA FSM,scala,akka,fsm,state-machine,Scala,Akka,Fsm,State Machine,以下是示例代码流: class FSMActor{ when(Idle) { case Event(Start, Uninitialized) => case Event(InitMap(inMap), t @ EvaluteRuleMap(v, c)) => logger.info(s"State = $stateName, Event = Event(_, InitMap(inMap))") goto(EVALRule) using t

以下是示例代码流:

class FSMActor{
  when(Idle) {
    case Event(Start, Uninitialized) =>
    case Event(InitMap(inMap), t @ EvaluteRuleMap(v, c)) =>
      logger.info(s"State = $stateName, Event = Event(_, InitMap(inMap))")
      goto(EVALRule) using t.copy(ruleMap = inMap)
  }
  when(EVALRule) {
    case Event(RowMap(m), t @ EvaluteRuleMap(v, c)) =>
    logger.debug("input row map m " + m)
    **if ( <somecondition> ) {  // If comment this if-else block, I could see rowMaps being received.
      logger.debug(s"Moving to State Trigger x=$x")
      goto(TriggerRule) using t.copy(ruleMap = x.get)
    } else {
        logger.debug(s"staying in EVALRule, x = $x")
        stay
    }**
  }

  when(TriggerRule) {
    case Event(_, _) => ....
  }
 }
}
class-FSMActor{
何时(空闲){
案例事件(开始,未初始化)=>
案例事件(InitMap(inMap),t@EvaluteRuleMap(v,c))=>
info(s“State=$stateName,Event=Event(u,InitMap(inMap))”)
使用t.copy(ruleMap=inMap)转到(EVALRule)
}
何时(评估规则){
案例事件(行映射(m),t@EvaluteRuleMap(v,c))=>
logger.debug(“输入行映射m”+m)
**if(){//if注释这个if-else块,我可以看到接收到的行映射。
logger.debug(s“移动到状态触发器x=$x”)
使用t.copy(ruleMap=x.get)转到(TriggerRule)
}否则{
logger.debug(s“留在EVALRule中,x=$x”)
停留
}**
}
何时(触发规则){
案例事件(,)=>。。。。
}
}
}
当控件处于“EVALRule”状态时,它将继续接收流映射(RowMap),并基于一些计算,移动到触发规则

不幸的是,由于某些奇怪的原因,一些传入的行映射在“case事件(行映射(m),t@EvaluteRuleMap(v,c))=>和 如果我对代码bock(在上面的代码中用粗体表示)进行注释,那么我可以看到接收到的所有传入行映射。 有人能告诉我为什么会这样吗?我一直在努力寻找原因,但无法找到原因。
感谢您的帮助,谢谢。

如果()
为真,您将进入
触发规则
状态。在该状态下,您正在查找类型为
EVENT
的消息,而不是
EVENT
(全部大写)。因此,FSM不处理该消息


一般来说,当FSM中缺少消息时,最好的调试方法是使用log/print语句编写一个
whenhandled
块,以查看哪些消息不是由您定义的状态处理的。

代码本身的消息处理有一些问题,我们对其进行了调试并修复了该问题,现在它可以无缝工作

对不起,这是打字错误,只是事件而不是事件。更正了。你能放一个whenUnhandled块,看看是否有消息到达那里吗?是的,我实际上有那个whenUnhandled{}块,但我仍然没有看到任何消息到达那里。我还有一个OnTransition{}块,在那里我可以看到状态转换发生,但在状态之间切换时会出现一些奇怪的行为。有什么想法吗?