例子
执行流程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>
截图
