Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools:测试/验证规则中的唯一LHS_Drools - Fatal编程技术网

Drools:测试/验证规则中的唯一LHS

Drools:测试/验证规则中的唯一LHS,drools,Drools,是否可以测试一组规则的条件是否重叠?我当前问题的一个简化版本是,如果我有一组测试Person.age的规则,是否可以保证/验证/测试LHS最多只对一个规则有效 例如,这两条规则是“有效的”: 规则“r1” 什么时候 个人(年龄>0岁和年龄=18岁和年龄0岁和年龄=8&&age

是否可以测试一组规则的条件是否重叠?我当前问题的一个简化版本是,如果我有一组测试Person.age的规则,是否可以保证/验证/测试LHS最多只对一个规则有效

例如,这两条规则是“有效的”:

规则“r1”
什么时候
个人(年龄>0岁和年龄<18岁)
然后
//做点什么
结束
规则“r2”
什么时候
人(年龄>=18岁和年龄<65岁)
然后
//做点别的
结束
但以下情况并非如此:

rule "r1"
when
  Person( age > 0 && age < 10 )
then
  // do something
end

rule "r2"
when
  Person( age >= 8 && age < 16 )  // range overlaps with r1!
then
 // do something else
end
规则“r1”
什么时候
个人(年龄>0岁和年龄<10岁)
然后
//做点什么
结束
规则“r2”
什么时候
Person(年龄>=8&&age<16)//范围与r1重叠!
然后
//做点别的
结束

我知道我可以使用halt()来防止触发多个规则,我正在寻找方法来防止或至少警告触发多个规则的可能性。

这样的重叠不一定是规则中的错误,因此您必须自己编写一些代码,根据您的设置检查错误

“稳定API”不提供访问已编译规则以检索约束的方法。您必须使用一些内部API类。编写此代码并进行测试(!)这可能比为您的规则开发可靠的测试需要付出更多的努力-无论如何,您都必须这样做


警告从一组规则中触发多个规则可以由事件侦听器直接完成。

这样的重叠不一定是规则中的错误,因此您必须自己编写一些代码,根据设置检查错误

“稳定API”不提供访问已编译规则以检索约束的方法。您必须使用一些内部API类。编写此代码并进行测试(!)这可能比为您的规则开发可靠的测试需要付出更多的努力-无论如何,您都必须这样做


警告从一组规则中触发多个规则可以由事件侦听器直接完成。

这样的重叠不一定是规则中的错误,因此您必须自己编写一些代码,根据设置检查错误

“稳定API”不提供访问已编译规则以检索约束的方法。您必须使用一些内部API类。编写此代码并进行测试(!)这可能比为您的规则开发可靠的测试需要付出更多的努力-无论如何,您都必须这样做


警告从一组规则中触发多个规则可以由事件侦听器直接完成。

这样的重叠不一定是规则中的错误,因此您必须自己编写一些代码,根据设置检查错误

“稳定API”不提供访问已编译规则以检索约束的方法。您必须使用一些内部API类。编写此代码并进行测试(!)这可能比为您的规则开发可靠的测试需要付出更多的努力-无论如何,您都必须这样做


事件侦听器可以用一种简单的方式警告从一组规则中触发多个规则。

我无法想象有一种方式在规则重叠时自动检测,因此,正如laune在回答中所说,您必须提出自己的测试用例等,并使用事件侦听器来提醒多个规则

为了防止触发第二个/第三个/etc规则,您可以插入在所有规则之间共享的控制事实(类似于,例如) 但它们将成为你规则条件的一部分。 所以你最终会添加一个条件,比如

not RuleHasFiredControlFact
给你的左手什么的

insert(new RuleHasFiredControlFact())  

对于您的RHS(伪代码,不完整)

我无法想象,如果存在规则重叠,会有一种“自动检测”的方式,因此正如laune在回答中所说,您必须拿出自己的测试用例等,并使用事件侦听器来提醒多个规则

为了防止触发第二个/第三个/etc规则,您可以插入在所有规则之间共享的控制事实(类似于,例如) 但它们将成为你规则条件的一部分。 所以你最终会添加一个条件,比如

not RuleHasFiredControlFact
给你的左手什么的

insert(new RuleHasFiredControlFact())  

对于您的RHS(伪代码,不完整)

我无法想象,如果存在规则重叠,会有一种“自动检测”的方式,因此正如laune在回答中所说,您必须拿出自己的测试用例等,并使用事件侦听器来提醒多个规则

为了防止触发第二个/第三个/etc规则,您可以插入在所有规则之间共享的控制事实(类似于,例如) 但它们将成为你规则条件的一部分。 所以你最终会添加一个条件,比如

not RuleHasFiredControlFact
给你的左手什么的

insert(new RuleHasFiredControlFact())  

对于您的RHS(伪代码,不完整)

我无法想象,如果存在规则重叠,会有一种“自动检测”的方式,因此正如laune在回答中所说,您必须拿出自己的测试用例等,并使用事件侦听器来提醒多个规则

为了防止触发第二个/第三个/etc规则,您可以插入在所有规则之间共享的控制事实(类似于,例如) 但它们将成为你规则条件的一部分。 所以你最终会添加一个条件,比如

not RuleHasFiredControlFact
给你的左手什么的

insert(new RuleHasFiredControlFact())  
到您的RHS(伪代码,不完整)