有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有规则引擎的java“if-then-else”

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

if (Condition)
   { 
    a = true;
   }
else
   {
    a = false;
   }

最好的方法是什么

目前我有两个选择:

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

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


rule "test2"
where
  $o: Object( not Condition)
then 
  $o.a = false
end

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

共 (2) 个答案

  1. # 1 楼答案

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

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

    rule "test"
    where 
      $o: Object()
    then 
      $o.a = (! Condition);
    end
    
  2. # 2 楼答案

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

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