Java &引用;如果是,则为“否则”;使用规则引擎

Java &引用;如果是,则为“否则”;使用规则引擎,java,rules,drools,rule-engine,Java,Rules,Drools,Rule Engine,我是drools新手,给定一个条件(condition)和一个布尔变量“a”,我想用drools创建以下规则: if (Condition) { a = true; } else { a = false; } 最好的方法是什么 目前我有两个选择: 1.创建2条带条件且不包含条件的规则(如果…那么…,如果不…那么…) 2.默认情况下,将变量a设置为false,然后触发规则 rule "test" no loop salience 100 where

我是drools新手,给定一个条件(condition)和一个布尔变量“a”,我想用drools创建以下规则:

if (Condition)
   { 
    a = true;
   }
else
   {
    a = false;
   }
最好的方法是什么

目前我有两个选择:

1.创建2条带条件且不包含条件的规则(如果…那么…,如果不…那么…)

2.默认情况下,将变量a设置为false,然后触发规则

rule "test"
no loop
salience 100
where 
  $o: Object()
then 
  $o.a = false;
end


rule "test"
where
  $o: Object( not Condition)
then 
  $o.a = true;
end

本质上,Rete引擎寻找正匹配,因此是的,您需要多个规则,在if-then-else块中每个条件检查一个规则。你的第一个例子更清晰,更直观,我同意

或者,如果您正在处理一个简单的逻辑求反(if else),其中变量值与条件匹配,那么您可以只使用一个规则:

rule "test"
where 
  $o: Object()
then 
  $o.a = (! Condition);
end

请记住,规则引擎不仅仅是IF/ELSE容器。您正在从命令式方法转变为 if(条件){}else{} 使用声明式方法,让引擎根据工作记忆中的上下文(事实)来决定和评估规则

有两条规则很好,但你到底想达到什么目的?根据要实现的对象结构和业务逻辑,有几种方法可以解决不同的问题。你能给我们更多关于你想要实现什么的细节吗? 干杯

为.NET web世界解决了这个问题。我敢肯定,如果你在谷歌上搜索,你可以找到同样类型的Java用户界面。
rule "test"
where 
  $o: Object()
then 
  $o.a = (! Condition);
end