规则“一”
activation-group "Harris"
salience 10
when
$p : Person(age < 10);
then
$p.setDiscount(0.1);
结束
规则“两个”
activation-group "Harris"
salience 10
when
$p : Person(age > 10);
then
$p.setDiscount(0.2);
结束
当我通过KSession.insert(Object)将一些人插入工作内存时,只评估第一个Person,其他人只是被忽略 . 我对Drools激活组的理解是,如果我有X个属于同一激活组的规则,具有不同的显着值,则每个Person将由规则处理,而具有最高显着性的那个将被解雇,其余的将被忽略 . 一旦完成,下一个人将会通过并重复该过程 . 我所遇到的是,触发该激活组中任何规则的第一个人将禁用整个激活组,并且不会处理其他人员 . 有什么建议吗?
1 回答
“激活组中只有一个规则会触发,即第一个触发规则取消同一组内其他规则的任何现有激活 . ”这很明确 .
如果您想对许多Person事实做同样的事情,请不要使用激活组 .
(a)只插入一个,解雇所有规则 - 重复 .
(b)插入许多人,解雇所有规则,但在每个后果中撤回一个人事实 .
突显几乎总是坏的 . 使用逻辑(约束)对规则触发顺序进行细粒度控制 .