在scxml中的转换条件求值中调用自定义函数

在scxml中的转换条件求值中调用自定义函数,xml,state-machine,scxml,apache-commons-scxml,Xml,State Machine,Scxml,Apache Commons Scxml,我想调用script标记中定义的自定义函数,同时计算transition块中的cond 例如,我想将函数定义为: <datamodel> <data expr="1" id="xOccurrences"/> <data expr="0" id="yOccurrences"/> </datamodel> <script> def updateVars(hasXOccurred, hasYOccurred) {

我想调用
script
标记中定义的自定义函数,同时计算
transition
块中的
cond

例如,我想将函数定义为:

<datamodel>
    <data expr="1" id="xOccurrences"/>
    <data expr="0" id="yOccurrences"/>
</datamodel>
<script>
    def updateVars(hasXOccurred, hasYOccurred) {
        if(hasXOccurred) xOccurrences++
        if(hasYOccurred) yOccurrences++
    }

    def thresholdBreached(hasXOccurred, hasYOccurred) {
        updateVars(hasXOccurred, hasYOccurred)

        if(xOccurrences > 5 && yOccurrences > 8)
            return true

        return false
    }
</script>

def updateVars(hasXOccurred,hasYOccurred){
如果(hasXOccurred)xOccurrences++
如果(已经发生)发生++
}
def阈值已突破(hasXOccurred,hasYOccurred){
updateVars(hasXOccurred,hasYOccurred)
如果(xOccurrences>5和&yOccurrences>8)
返回真值
返回错误
}
然后我想在transition eval表达式中调用它们(有副作用):



有可能在scxml状态机定义中实现这一点吗?

您的方法看起来应该可行。cond可以调用顶级脚本中定义的函数,该函数可能会产生副作用。我注意到您的函数定义会有语法错误,因为它们在函数声明中使用了“def”。cond可以调用顶级脚本中定义的函数,该函数可能会产生副作用。我注意到您的函数定义会有语法错误,因为它们在函数声明中使用了“def”。
<state id="StateA">
    <transition event="EventX" cond="thresholdBreached(_event.data.xOccurred, _event.data.yOccurred)" target="StateB"/>
</state>