Drools:仅在存在时修改()或更新(),否则添加

时间:2014-02-06 14:44:12

标签: 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并且否则修改Sample的值,我该怎么办? 我有义务写两条规则吗?

1 个答案:

答案 0 :(得分:1)

不,您只需添加应禁止插入新样本的条件:

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后 如果你已经有一个Sample事实,并且需要将setValue设置为-1.0以获得组合Start / LeftArm,那么你需要两个规则,但是你可以使用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