【问题标题】:Are conditional targets in <transition> blocks supported in SCXML?SCXML 是否支持 <transition> 块中的条件目标?
【发布时间】:2016-03-09 16:52:14
【问题描述】:

我想在 SCXML 中实现这种条件转换

current_state = s01  
if (Math.random() < 50) go to state s02  
  else go to state s03  

SCXML 是否支持这种条件目标?
放到SCXML语言中,相当于下面的sn-p可以吗?

<transition event="event_1">
        <if cond="import java.util.Random; Math.abs(new Random().nextInt(100)) gt 50">
            <target="s02"/>
            <else/>
            <target="s03"/>
        </if>
</transition>

不胜感激任何指向他们的文档的指针。对于这个/替代策略来处理它。
谢谢。

【问题讨论】:

    标签: transitions scxml apache-commons-scxml


    【解决方案1】:

    类似以下(未经测试的)代码将执行您想要的操作。

    <scxml 
        datamodel="ecmascript"
        xmlns="http://www.w3.org/2005/07/scxml"
        version="1.0">
    
        <state id="s01">
          <transition event="event_1" target="s02" cond="Math.random() &gt; .5"/>
          <transition event="event_1" target="s03"/>
        </state> 
    
        <state id="s02"/>
    
        <state id="s03"/>
    
    </scxml>
    

    【讨论】:

    • 感谢@jbeard4 的回答。但我的主要动机是想知道“目标”块是否可以从 顶级标签中取出,并放入任何内部主体语句(如 )中。 SCXML 允许吗?
    • 你为什么要这样做?
    • 不,SCXML(标准)不提供在除&lt;transition&gt; 元素属性之外的任何地方指定目标的机制。对于我公司的 SCXML 实现,我们添加了一个 targetexpr 属性,用于评估代码以确定目标。
    • 但是我们添加的内容超出了标准,Apache SCXML 也不支持。 (实际上,非确定性状态机有点奇怪。)
    • Phrogz:在条件句中包含“目标”表达式并不一定意味着状态机将是不确定的。但我明白你的意思。 @jbeard4:想象一个实验场景,它涉及来自一个节点的超过 5 条路径,每条路径都是有条件地选择的。虽然可以通过数据模型/变量来解决它,但在 中编写条件会更直观;提及针对每个条件的目标,以及“基本”转换(如果没有匹配项)。这仍然可以确保 SM 是确定性的,但会增加建模的灵活性。
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多