gpt4 book ai didi

java - 为什么 Drools 在使用议程过滤器触发特定规则时验证所有其他规则?

转载 作者:行者123 更新时间:2023-11-28 20:39:21 25 4
gpt4 key购买 nike

我有一大堆规则,我正在尝试为它们编写一些单元测试。在我的测试中,我使用这个:

int rulesFired = kSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule name 1"));

我注意到,虽然返回的触发规则数量为 1,但 Drools 仍会尝试根据满足条件的任何其他规则进行验证。我有时会收到来自其他规则的错误消息,这些规则未在我的规则名称等于议程过滤器中定义,因为条件匹配基于我在 kSession 中为单元测试插入的内容。

例如我有:

rule "test1"
when
$var : Map(this["key"] == "gold")
then
do something
end

rule "test2"
when
$var : Map(this["key"] == "gold" && this["other"] == "silver")
then
do something
end

在我对规则 1 的测试中,我有一张只有“ key ”的 map 。当我使用“test1”的过滤器运行测试时,我将收到一个空指针,因为我的 map 中没有“其他”的值,即使我过滤的规则不关心“其他”

为什么会这样?我在任何地方都找不到关于它的任何文档。就好像 Drools 必须在过滤之前验证我的 DRL 文件中的所有规则和语法。

最佳答案

用于评估规则条件的代码来自所有规则的组合,可能以减少整体工作量的方式组合相同条件或部分条件(例如模式或约束)。因此,无法在运行时抑制对单个规则条件的评估

关于java - 为什么 Drools 在使用议程过滤器触发特定规则时验证所有其他规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com