我目前正在学习Drools并阅读本书Mastering JBoss Drools 6
在第4章的开头,给出了一个示例来说明delete
关键字的使用。就是这个例子:
rule "Init current date"
when
then
insert(new Date());
end
rule "Expire coupons"
when
$now: Date()
$cp: Coupon(validUntil before $now)
then
delete($cp);
end
rule "Execute coupon"
when
$o: Order()
$cp: Coupon(order == $o)
then
System.out.println(" We have a coupon for this order!");
end
现在我的问题是:为什么"执行优惠券"规则被解雇晚于"过期优惠券"规则。由于我已经知道规则的顺序是不确定的,所以我认为"执行优惠券"规则可以在其他两个规则之前触发
答案 0 :(得分:1)
你是对的。根据我的经验,我甚至会在“执行优惠券”和“#34;首先解雇,因为后来的规则通常先被解雇。
显然,必须通过
来纠正这个例子rule "Execute coupon"
when
$now: Date()
$o: Order()
$cp: Coupon(order == $o, validUntil after $now )
then
System.out.println(" We have a coupon for this order!");
end
或使用显着性(如果可能,应尽量避免使用)。
然而(我没有这本书)我还可以设想一个规则集可以按照给定的方式工作:
session.insert( new Date() );
session.insert( coupon );
session.fireAllRules();
session.insert( order );
session.fireAllRules();