使用Drools中声明的类型进行规则验证时无错误
我想使用声明的类型进行规则验证。我有两种声明类型:使用Drools中声明的类型进行规则验证时无错误,drools,Drools,我想使用声明的类型进行规则验证。我有两种声明类型: declare QoS time : int end declare QoSThreshold time : int end 如果我写这条规则: rule "Time" when $qosThreshold : QoSThreshold() $qos : QoS(time < 2 ) then update($qos); end 但是,如果我将规则改写为: rule "Time" when
declare QoS
time : int
end
declare QoSThreshold
time : int
end
如果我写这条规则:
rule "Time"
when
$qosThreshold : QoSThreshold()
$qos : QoS(time < 2 )
then
update($qos);
end
但是,如果我将规则改写为:
rule "Time"
when
$qosThreshold : QoSThreshold()
$qos : QoS(time < $qosThreshold.time )
then
update($qos);
end
规则“时间”
什么时候
$qosThreshold:qosThreshold()
$qos:qos(时间<$qosThreshold.time)
然后
更新($qos);
结束
我没有发现任何错误
你知道为什么吗
PD:我只是在做一个简单的例子,它基于我们可以找到的代码或在中。在第一种情况下,验证会提醒您,没有规则覆盖
Qos.time>=2
的情况,验证者可以从约束中看到常量(2
)中扣除
在第二种情况下,由于另一个值是可变的,验证器不能做出这样的声明。它可能会说某些值可能(甚至是肯定的)没有被覆盖,但是验证器的设计者决定不这样做
自动验证一组规则是一个非常不确定的问题——它可能会告诉您一些在简单情况下有用的信息。但请注意第二个示例中发生的情况。(毫无疑问,验证者是按规则操作的,您可能会问验证者是否能够验证自己,以及结果如何。)
rule "Time"
when
$qosThreshold : QoSThreshold()
$qos : QoS(time < $qosThreshold.time )
then
update($qos);
end