Drools Can';Don’不要让积攒物正常工作

Drools Can';Don’不要让积攒物正常工作,drools,Drools,我的班级结构如下(A类包含B类): 当B类中某个特定字段的平均值大于给定值时,我会尝试做一些事情 因此,我试图写以下内容: when A($var1 : object) accumulate( B($num:num) from $var1; $avg1 : avg ($num); $avg1 < 10000) then ... 什么时候 A($var1:object) 从$var1累积(B($num:num); $avg1:avg($num);$

我的班级结构如下(A类包含B类):

当B类中某个特定字段的平均值大于给定值时,我会尝试做一些事情

因此,我试图写以下内容:

when
   A($var1 : object)
   accumulate( B($num:num) from $var1;
               $avg1 : avg ($num); $avg1 < 10000)
then ...
什么时候
A($var1:object)
从$var1累积(B($num:num);
$avg1:avg($num);$avg1<10000)
然后
所发生的情况是,不是累加会话中的所有实体并计算所有实体的平均值,而是分别计算每个实体的平均值。 因此,如果会话已经包含5个大于10000的数值,并且插入了另一个数值,那么“then”部分将被调用6次(每个部分的平均值等于数值本身),而不是仅调用一次

你有什么线索可以帮我解决这个问题吗


谢谢

访问字段
对象
的字段
num
时,必须累积所有事实

when
  accumulate( A( $var1: object );
              $avg1: avg($var1.getNum()); $avg1 < 10000)
then ...
什么时候
累计(A($var1:object);
$avg1:avg($var1.getNum());$avg1<10000)
然后
插入所有B对象作为事实也将允许您编写简单的

when
  accumulate( B( $num: num );
              $avg1: avg($num); $avg1 < 10000)
then ...
什么时候
累计(B($num:num);
$avg1:avg($num);$avg1<10000)
然后

谢谢。我试试看。但是有一件事我忘了提到,类B是抽象的,数值在它的一个子类中。在这种情况下,我可以将B类角色分配给正确的孩子吗?哪种情况是“这种情况”?A B是A B,即使是抽象的,并且扩展B的子类也是A B,如果字段num仅在一个子类(不是全部)中,您不能以如此简单的方式执行此操作,因为由B定义的接口不存在。但是你的原始代码就不会编译了。
when
  accumulate( B( $num: num );
              $avg1: avg($num); $avg1 < 10000)
then ...