带有规则引擎的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
# 1 楼答案
本质上,Rete引擎会寻找正匹配,所以是的,您需要多个规则,在if-then-else块中每个条件检查一个规则。你的第一个例子更清晰、更直观,我同意
或者,如果您正在处理一个简单的逻辑求反(if else),其中变量值与条件匹配,那么您可以只使用一个规则:
# 2 楼答案
请记住,规则引擎不仅仅是IF/ELSE容器。你正在从命令式的 如果(条件){else} 使用声明式方法,让引擎根据工作记忆中的上下文(事实)来决定和评估规则
有两条规则是可以的,但你到底想要实现什么呢?根据要实现的对象结构和业务逻辑,有几种方法可以解决不同的问题。你能给我们更多关于你想要实现什么的细节吗? 干杯