Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 如果其中一条规则没有';不及格_Drools - Fatal编程技术网

Drools 如果其中一条规则没有';不及格

Drools 如果其中一条规则没有';不及格,drools,Drools,我要开始一个流口水的项目。我的项目的drl文件如下所示: rule "Rule 1" when Item( id > 100) // consequence implementation rule "Rule 2" when Item( type == "phone") // consequence implementation rule "Rule 3" when Item( screenSize == 5) // consequence implementa

我要开始一个流口水的项目。我的项目的drl文件如下所示:

rule "Rule 1"
when
    Item( id > 100)
// consequence implementation

rule "Rule 2"
when
    Item( type == "phone")
// consequence implementation

rule "Rule 3"
when
    Item( screenSize == 5)
// consequence implementation

rule "Rule 4"
when
    Item( branch == "motorola")
// consequence implementation

rule "Rule 5"
when
    Item( price > 200)
// consequence implementation
当Drools运行时,我有5条被触发的规则。如果一件物品没有通过5条射击规则中的一条,我希望Drools会忽略其余4条射击规则。口水有我的功能吗


另一件重要的事情是我的口水流在AgendaFilter上。该功能是否具有AgendaFilter支持

首先,标题“规则的其余部分”中的短语似乎表示您认为这些规则是按特定顺序进行评估的(如文件中所述)。事实并非如此:没有秩序。因此,如果规则#1和#2被触发(
ìd>0
type==“phone”
)和
screenSize!=5
、规则4和规则5仍将发射,或者它们可能已经发射了

要发现规则1到5中引用了某个类的事实是否参与了这些规则的全部或部分或全部,您必须创建自己的逻辑。例如,使用

class Marker { 
  Set<Integer> rules;
  TheClassOfYourItem item;
  //...
}

我不理解你的最后一段。什么是“All rules case”,您的过滤器示例不清楚。All-rules case为Drools,如果项目符合条件,运行时将触发5条规则。当我使用AgendaFilter仅允许“规则1”、“规则2”和“规则3”时,Drools将仅使用[“规则1”、“规则2”、“规则3”]检查项目,正如您所说:您所称的“所有规则案例”和使用AgendaFilter阻止一个或多个规则是不同的。再一次,允许触发的规则(通过过滤器)将尽可能多地触发,除非您添加约束,例如,如我的回答中所述。对不起!我不清楚的问题导致你不匹配。我更新了我的问题。不是“如果没有规则应该开火,除非所有规则都可以开火”。假设触发5条规则时,第一条和第二条规则被传递,但第三条规则未被传递。我希望Drools忽略第四个和第五个触发的规则。同样,此注释表示您认为规则是按照它们在DRL文件中出现的顺序处理的。事实并非如此!请看我的最新答案。谢谢,但我不在乎规则的顺序。有效项必须通过5条规则。如果一个项目没有通过5条规则中的任何一条,我希望Drools不会触发其余4条规则。如果你不想触发任何规则,除非你可以触发所有规则,那么你必须编写一条规则,当其中一条规则无法触发时触发,并尝试在原始规则之前触发这些规则。或者,您可以编写一条规则,将所有五条规则的条件结合起来,然后只使用这一条规则。
rule "Rule 1-5"
when
    Item( id > 100, type == "phone". screenSize == 5,
          branch == "motorola", price > 200)
then
    // ... Do what needs to be done if all five conditions are true
end