Drools:仅当存在时才修改()或更新(),否则添加
这是我的规则:Drools:仅当存在时才修改()或更新(),否则添加,drools,rules,Drools,Rules,这是我的规则: rule "Set value of LeftArm fluent" when $ev: Start() $fl:LeftArm() then Sample s = new Sample(); s.setFluent($fl); s.setValue(-1.0); insert(s); end 好的,但是如果我只想在没有相同$fl的样本时设置样本的值,或者修改样本的值,我该怎么做呢? 我必须写两条规则吗?不,您只需添加一个条件,
rule "Set value of LeftArm fluent"
when
$ev: Start()
$fl:LeftArm()
then
Sample s = new Sample();
s.setFluent($fl);
s.setValue(-1.0);
insert(s);
end
好的,但是如果我只想在没有相同$fl的样本时设置样本的值,或者修改样本的值,我该怎么做呢?
我必须写两条规则吗?不,您只需添加一个条件,禁止插入新样本:
rule "Set value of LeftArm fluent"
when
$ev: Start()
$fl:LeftArm()
not Sample( fluent == $fl )
then
Sample s = new Sample();
s.setFluent($fl);
s.setValue(-1.0);
insert(s);
end
修改Q后
如果您已经有一个示例事实,并且需要将Start/LeftArm组合的value设置为-1.0,则需要两个规则,但可以使用extends:
rule "StartLeftArm"
when
$ev: Start()
$fl:LeftArm()
then
end
rule "create Sample" extends "StartLeftArm"
when
not Sample( fluent == $fl )
then
Sample s = new Sample();
s.setFluent( $fl );
insert( s );
end
rule "set Sample Value" extends "StartLeftArm"
when
$s: Sample( fluent == $fl, value != -1.0 )
then
modify( $s ){ setValue( -1.0 ) }
end
规则“设置左臂fluent 66422的值”在“$ev:Start()$fl:LeftArm()$s:Sample(fluent==$fl)然后是System.out.println(“设置为fluente LeftArm a-1.0”)时没有循环;修改($s){setValue(-1.0);}当$ev:Start()$fl:LeftArm()未采样(fluent==$fl)时,结束规则“LeftArm fluent 66421的设置值”,然后修改System.out.println(“Settato fluente LeftArm a-1.0”);样本s=新样本();美元;s.设定值(-1.0);插入(s);结束离开原来的帖子,只需添加任何修改。否则答案就没有意义了。