例子
执行流程
rule1
subState=##chenshun00
rule2
如果 (height 不等于 None 并且 weight 不等于 None ) 进入执行 { f44=searchFromDb({height},{weight}) }
否则 如果 (height 等于 None 或者 weight 等于 None ) 进入执行 { chen=fw 并且 shun=真fw }
rule3
如果 (f44 不等于 None) 进入执行 { chen={f44.chen} 并且 shun={f44.shun} 并且 sizez={f44.sizez} 并且 fzz={f44.fzz} }
rule4
如果 (chen 不等于 None 并且 shun 不等于 None ) 进入执行 { a_u=true }
<domain>
<!-- 自定义函数 -->
<function name="your_function_name">opendial.domains.Test$FuckFunction</function>
<function name="searchFromDb">opendial.domains.Test$SearchFromDb</function>
<!-- 第一个模型 -->
<model trigger="chenshun00">
<!-- 没有条件 100$执行effect块 -->
<rule>
<case>
<!--
等价于 var subState = "##chenshun00";
var #chenshun00 = 111;
var ##chenshun00 = 111;
-->
<effect>
<set var="subState" value="##chenshun00"/>
<set var="#chenshun00" value="111"/>
<set var="##chenshun00" value="111"/>
</effect>
</case>
</rule>
<!-- 存在condition,需要根据上下文进行判定,如果 height!=None && weight != None
执行searchFromDb({height},{weight}),参数从上下文中获取。
-->
<rule>
<case>
<condition operator="and">
<if var="height" value="None" relation="!="/>
<if var="weight" value="None" relation="!="/>
</condition>
<effect prob="1">
<set var="f44" value="searchFromDb({height},{weight})"/>
</effect>
</case>
<!-- 如果上边那个case没有命中,那么继续判定下边的case是否能命中。如果命中就执行effect,否则跳过 -->
<case>
<condition operator="or">
<if var="height" relation="=" value="None"/>
<if var="weight" relation="=" value="None"/>
</condition>
<effect prob="1">
<set var="chen" value="fw"/>
<set var="shun" value="真fw"/>
</effect>
</case>
</rule>
<!-- 如果f44 != None ,执行effect中的变量赋值 -->
<rule>
<case>
<condition>
<if var="f44" relation="!=" value="None"/>
</condition>
<effect>
<set var="chen" value="{f44.chen}"/>
<set var="shun" value="{f44.shun}"/>
<set var="sizez" value="{f44.sizez}"/>
<set var="fzz" value="{f44.fzz}"/>
</effect>
</case>
</rule>
<rule>
<case>
<condition operator="and">
<if var="chen" relation="!=" value="None"/>
<if var="shun" relation="!=" value="None"/>
</condition>
<effect>
<set var="a_u" value="true"/>
</effect>
</case>
</rule>
</model>
<!-- 由于上边流程流转引发了a_u的变更,因此继续执行trigger=a_u的model,设置u_m变量,不能继续乡下跑了,执行结束 -->
<model trigger="a_u">
<rule>
<case>
<effect prob="1">
<set var="u_m" value="我输出一下这个变量吧 {chen} {shun}"/>
</effect>
</case>
</rule>
</model>
</domain>
截图