【问题标题】:Drools: modify() or update() only if exists, otherwise addDrools:仅当存在时修改()或更新(),否则添加
【发布时间】:2014-02-06 14:44:11
【问题描述】:

这是我的规则:

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 的 Samples 的情况下设置 sample 的值,否则修改 Sample 的值,我该怎么做? 我有义务写两条规则吗?

【问题讨论】:

  • 保留原帖,只需添加任何修改。否则答案将毫无意义。

标签: drools rules


【解决方案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 fact 并且需要将 Start/LeftArm 组合的 setValue 设置为 -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

【讨论】:

  • rule "Set value of LeftArm fluent 66422" no-loop when` $ev: Start() $fl: LeftArm() $s: Sample(fluent==$fl) then System .out.println("Settato fluente LeftArm a -1.0");修改($s){ setValue(-1.0); } end rule "Set value of LeftArm fluent 66421" when $ev: Start() $fl:LeftArm() not Sample(fluent==$fl) then System.out.println("Settato fluente LeftArm a -1.0 ");样品 s = 新样品(); s.setFluent($fl); s.setValue(-1.0);插入物;结束
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多