事实插入时触发的规则 - Drools

Rules fired upon fact insert - Drools

我是 Drools 的新手,从基础开始。这是一个设置;

  1. 有几个规则文件
  2. 不同文件中的规则属于不同的议程组
  3. 所有规则都基于同一个事实
  4. 在我的单元测试中,我获得了一个特定的 "Agenda Group",设置焦点 (session.setFocus)
  5. 我插入事实(这是我注意到其他议程组中的规则正在接受评估的地方,即使重点不在他们身上)

  6. fireAllRules()

难道不应该触发与关注的特定议程组相关的规则,而不是所有组的所有规则吗?

在许多基于规则的系统中,尤其是那些遵循 Rete 或类似算法的系统中,这是一条基本法则,评估 条件(“t when", "left hand side") 只要工作内存中有 更改 就会发生:插入、更新或删除。相反,规则触发或 执行 的后果 ("then", "right hand side") 发生在 fireAllRulesfireUntilHalt 被调用之后。

规则的触发 - 更准确地说:规则的激活 - 可以通过多种方式控制。在这里,确实是focused agenda组限制了引擎可以执行的内容。

记住这一点:评估不等于执行