私はDroolsを習得しており、簡単なプログラムを実装しました。しかし、期待どおりの結果は得られません。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
私はsimleの申請オブジェクトを挿入します。
Applicant applicant1 = new Applicant("Berat", 20, 2010);
kieSession.insert(applicant1);
kieSession.fireAllRules();
System.out.println(applicant1.getName() + " is of valid age: " + applicant1.isValid());
私は、このオブジェクトへのすべてのルールを起動すると、出力は次のようになります。
Beratは運転免許の対象となります!
ベラットはアルコールを買うことができません!
ベラトは有効な年齢である:
本当の私が顕現キーワードでルールの優先権を与える、が、「缶アルコールによる」ルールがまだ発射されます。最初のルールではisValid(true)が実行され、2番目のルールではisValid()== falseがfalseを返す必要があるため、パーツを見逃すはずです。
私はこの動作が正しいと考えています。重要度を定義していますので、高性能ルールが最初に実行され、次に別のルールが実行されます。 – mhasan
アプリケーションオブジェクトの年齢が18歳を超えているため、setValid(true) isValid()== falseはfalseを返し、ルールのthen部分は実行されません。 – InstantCrush