首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从scxml中的状态转换

从scxml中的状态转换
EN

Stack Overflow用户
提问于 2015-05-18 19:32:45
回答 1查看 701关注 0票数 0

我正在尝试使用Apache实现一个控制流。我的状态转换就像

代码语言:javascript
复制
<scxml initial="State1">

    <state id = "State1"><transition event="event1" target="State2"></state>
    <state id = "State2">
        <transition event="event2" target="State3">
        <transition event="event3" target="State4">
    </state>
   <state id = "State3">
        <transition event="event4" target="State2">
   </state>

   <state id = "State4">
        <transition event="event5" target="State2">
   </state>

   <state id = "State5"><transition target="State1">
</scxml>

作为一个状态机,它工作正常,没有任何问题。但我有两个要求,我面临的问题是

  1. 我必须检查每个状态下的外部事件,如果该事件为真,我必须进入循环的最后一个状态。实现这一目标的最佳途径是什么?
  2. 当我在state2的时候,我有可能通过state3state4state5。在检查转到state3state5的条件后,是否有可能触发事件或更改状态?

上述两个问题似乎都有相同的解决方案,但我无法找到实现这些问题的最佳方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 22:48:00

检查外部事件…如果这个事件是真的,…进入循环的最后一个状态。

您可以通过在父包装器中包装所有状态并从其父包装器中转换来实现这一点。例如:

代码语言:javascript
复制
<scxml xmlns="http://www.w3.org/2005/07/scxml" initial="state1">
   <state id='all'>
     <!-- this will always be tested, no matter which child state you are in -->
     <transition event="externalevent" target="state5" />
     <state id="state1"><!-- ... --></state>
     <state id="state2"><!-- ... --></state>
     <state id="state3"><!-- ... --></state>
     <state id="state4"><!-- ... --></state>
     <state id="state5"><!-- ... --></state>
   </state>
</scxml>

当我在state2的时候,有可能我可以通过state3__去state4state5

这似乎是一个不好的模式,你正在描述,但是的,这是可能的。您需要在进入状态的过程中设置一个标志,并使用该标志立即进行转换。例如,使用一个简单的Lua数据模型 ( Apache不支持,但这里使用是为了清晰起见):

代码语言:javascript
复制
 <datamodel>
   <data id="bounceTo" expr="-1" />
 </datamodel>

 <state id="state2">
   <transition event="bounce-3-4" target="state3">
     <assign location="bounceTo" expr="4" />
   </transition>
   <transition event="bounce-3-5" target="state3">
     <assign location="bounceTo" expr="5" />
   </transition>
 </state>

 <state id="state3">
   <transition cond="bounceTo==4" target="state4">
     <assign location="bounceTo" expr="-1" />
   </transition>
   <transition cond="bounceTo==5" target="state5">
     <assign location="bounceTo" expr="-1" />
   </transition>
 </state>

在Apache中设置、测试和清除数据值是我所无法理解的。

,我必须问您为什么要这样做。在我看来,在转换本身( state3 )上复制您可能想要的进入或退出操作(),并让这些转换直接针对状态4或5,似乎要好得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30311432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档