Drools 中的 knowledgeSession.fireAllRules() 和 knowledgeSession.fireAllRules(1) 有什么区别?
What is difference between knowledgeSession.fireAllRules() and knowledgeSession.fireAllRules(1) in Drools ?
我的用例是 return 第一个匹配的规则而不匹配所有其他规则。有没有办法做到这一点? knowledgeSession.fireAllRules(max) 的意义是什么?
fireAllRules(max) 方法基本上采用您想要的规则匹配数量。它在内部所做的只是创建一个限制匹配数量的 AgendaFilter。 (参见 AgendaFilter 接口文档)。跳过参数意味着使用过滤器 returns 每个可能的规则都为真,因此您将匹配所有内容。
如果您想精确匹配 1 条规则,并且想知道它是哪一条,您可以将此方法与 AgendaEventListener 结合使用。
您可以做的是:
- 实施 AgendaEventListener 以存储已匹配的规则
- 调用 fireAllRules(1) 或编写您自己的议程过滤器以将匹配项数量限制为 1
- 评估匹配规则的侦听器
然而,这并不能让您控制要匹配的规则。使用过滤器时未匹配的所有规则,将在您下次触发所有规则时匹配(除非您再次限制规则执行等)。
我的用例是 return 第一个匹配的规则而不匹配所有其他规则。有没有办法做到这一点? knowledgeSession.fireAllRules(max) 的意义是什么?
fireAllRules(max) 方法基本上采用您想要的规则匹配数量。它在内部所做的只是创建一个限制匹配数量的 AgendaFilter。 (参见 AgendaFilter 接口文档)。跳过参数意味着使用过滤器 returns 每个可能的规则都为真,因此您将匹配所有内容。
如果您想精确匹配 1 条规则,并且想知道它是哪一条,您可以将此方法与 AgendaEventListener 结合使用。
您可以做的是:
- 实施 AgendaEventListener 以存储已匹配的规则
- 调用 fireAllRules(1) 或编写您自己的议程过滤器以将匹配项数量限制为 1
- 评估匹配规则的侦听器
然而,这并不能让您控制要匹配的规则。使用过滤器时未匹配的所有规则,将在您下次触发所有规则时匹配(除非您再次限制规则执行等)。