Java 降低lhs和rhs中变量的不同值
我有两条规则Java 降低lhs和rhs中变量的不同值,java,drools,Java,Drools,我有两条规则 rule "test1" when $cr: MyContext(flag1 == 1) then System.out.println("<---- Test1 start ---->"); $cr.setFlag1(10); System.out.println("<---- Test1 end ---->");
rule "test1"
when
$cr: MyContext(flag1 == 1)
then
System.out.println("<---- Test1 start ---->");
$cr.setFlag1(10);
System.out.println("<---- Test1 end ---->");
end
规则“test1”
什么时候
$cr:MyContext(flag1==1)
然后
System.out.println(“”);
$cr.setFlag1(10);
System.out.println(“”);
结束
规则“test2”显著性-1
什么时候
$cr:MyContext($flag1:flag1==1)
然后
System.out.println(“”);
System.out.println($flag1);
System.out.println(“”);
结束
在规则1中,我正在检查变量MyContext.flag1是否为1。既然这是真的,我就把它改成10。
在规则2中,我正在检查变量MyContext.flag1是否为1。
我没想到这个规则会执行,因为flag1是10
但令人惊讶的是,它执行并将flag1打印为10
在规则2的LHS和将flag1打印为10的RHS中,如何评估flag1==1为真?最初,Drools评估必须根据工作记忆中的事实触发两条规则。因此,解雇规则的议程是(根据您的突出程度):
- 等待被触发的规则“test1”
- 规则“test2”正在等待被激发
- 规则“test2”正在等待被激发
结果是Drools现在将从其议程中删除规则“test2”。最初,Drools评估必须根据您工作记忆中的事实触发两条规则。因此,解雇规则的议程是(根据您的突出程度):
- 等待被触发的规则“test1”
- 规则“test2”正在等待被激发
- 规则“test2”正在等待被激发
结果是Drools现在将从其议程中删除规则“test2”。当您启动Drools规则时,框架将在工作内存中获取您的规则输入,并确定哪些规则匹配。然后对这些规则匹配进行排序(根据显著性或自然顺序),然后按顺序激发 因此,当您启动规则时,“test1”和“test2”被确定为匹配项。然后Drools会首先触发“test1”,然后触发“test2” 如果您希望Drools重新评估规则匹配,则需要“告诉”框架您已对工作内存进行了更改。为此,您有以下内置方法: 方法 解释
插入
把一个新的事实放入工作记忆中。
删除
或收回
从工作内存中删除一些信息(对象)。
更新
更新/替换工作内存中的事实。
修改
在工作记忆中更改事实内部的字段。
当您触发drools规则时,框架会在工作内存中接收您的规则输入,并确定哪些规则匹配。然后对这些规则匹配进行排序(根据显著性或自然顺序),然后按顺序激发 因此,当您启动规则时,“test1”和“test2”被确定为匹配项。然后Drools会首先触发“test1”,然后触发“test2” 如果您希望Drools重新评估规则匹配,则需要“告诉”框架您已对工作内存进行了更改。为此,您有以下内置方法: 方法 解释
插入
把一个新的事实放入工作记忆中。
删除
或收回
从工作内存中删除一些信息(对象)。
更新
更新/替换工作内存中的事实。
修改
在工作记忆中更改事实内部的字段。
谢谢你的描述性回答!谢谢你的描述性回答!
rule "test2" salience -1
when
$cr: MyContext($flag1: flag1 == 1)
then
System.out.println("<---- Test2 start ---->");
System.out.println($flag1);
System.out.println("<---- Test2 end ---->");
end