我一直在學習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