使用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