"modify()" 或 "update()" 在 drools 规则中是必需的吗?

Is that "modify()" or "update()" necessary in a drools rule?

我有两条规则,它们有相同的显着性,相同的左轴但不同的右轴。我希望两条规则都被执行。但是,它们都会使 LHS 模式无法再次匹配。如果我使用 modify() 或 update(),肯定有其中之一不能执行。 是否有一些策略让流口水知道在执行完所有 RHS 后工作内存已更改?

有人可能会争辩说让两个规则具有相同的 LHS 是糟糕的设计。如果一个或另一个的 RHS 打算修改一个或多个参与事实,则尤其如此。

所以第一个建议是:合并右边的边,这样你就有了一条规则。

下一个最好的办法是确定发射顺序。在两者中使用显着性,以保证它们的相对顺序。将所有 update/modify 调用移至显着性较低的规则。

最后,如果规则引擎不需要 "seen" 更改,则无需使用 update/modify 这(我所说的)"dirty update" 在应该积累信息的地方很方便,但对 LHS 逻辑没有任何影响。