Drools的'and'关键字是按位&吗?

时间:2019-07-16 06:18:28

标签: drools drools-fusion

我正在尝试在有多个条件的地方编写滑动窗口规则。我尝试编写的规则是:

rule "1"
when
$test : Test (num1 > 100 && num2 > 101) && $number:Number() from accumulate(Test($t : num1) over window:time(20s), sum($t))
then
    System.out.println("Output is "+$test.getNum1()+" and sum is "+$number+"");
end

在上述规则中,引擎将累加num1和num2的值,即使它们不满足条件。 &&关键字按位运行,即同时评估LHS和RHS。 有人可以向我解释这种行为吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您有2个完全独立的模式:彼此之间没有引用on模式。然后,Drools将独立评估这些模式。

您可以做的就是以一种模式编写所有内容:

$number:Number() from accumulate(Test($t : num1 > 100, num2 > 101) over window:time(20s), sum($t))

或在模式之间建立“连接”:

$test : Test (num1 > 100 && num2 > 101) && $number:Number() from accumulate(Test(this == $test, $t : num1) over window:time(20s), sum($t))

希望有帮助,