我一直在学习Drools,并且实现了一个简单的程序。但是,输出结果并不符合我的预期。流口水规则的意外输出
规则.drl文件:
rule "Is of valid age" salience 10
when
$a: Applicant (getAge() > 18)
then
$a.setValid(true);
System.out.println($a.getName() + " is eligible for driving license!");
end
rule "Can by alcohol" salience 1
when
$a: Applicant(isValid() == false);
then
System.out.println($a.getName() + " cannot buy alcohol!");
end
在主我插入笑着申请对象:
Applicant applicant1 = new Applicant("Berat", 20, 2010);
kieSession.insert(applicant1);
kieSession.fireAllRules();
System.out.println(applicant1.getName() + " is of valid age: " + applicant1.isValid());
当我火了所有规则,对这个对象的输出是:
培拉特有资格驾驶执照!
培拉特不能买酒!
培拉特有效年龄:真正
虽然,我给的规则优先级和显着性的关键字,“可以通过醇”规则仍然被解雇。它不应该被解雇,因为在第一个规则中,isValid(true)被执行,并且在第二个规则中isValid()== false检查应该返回false,所以应该错过部分。
我认为行为是正确的突显定义了优先级,所以高显着性规则先执行,然后再执行另一个 – mhasan
由于申请者对象的年龄超过18岁,因此应该执行setValid(true)以便在“Can by by alcohol”规则中, isValid()== false应该返回false,并且规则的部分不应该被执行。 – InstantCrush