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);结束离开原来的帖子,只需添加任何修改。否则答案就没有意义了。