0

最近、Drools の使用を開始しましたが、drl ファイルの作成中にこの問題に直面しています。"Person" クラス オブジェクトのリストを作成し、このリストを .drl ファイルに渡します。ここで、リストを反復して、ある値よりも大きな「給与」を持つ人 (Person クラスのオブジェクト) を確認したいと考えています。しかし、コレクションを作業メモリに入れるのは悪い習慣なので、そうしなくても反復は可能ですか?

4

1 に答える 1

2

反復は Drools ルールに固有のものです。これは、ルールと命令型言語の if ステートメントの違いの 1 つです。ルールは、作業メモリに存在するオブジェクトごとに評価されます (これは 100% 正確ではありません。Drools はそれよりもインテリジェントです)。

したがって、個人オブジェクトのそれぞれをファクトとしてセッションに挿入する場合、必要なことを行うために必要なルールは 1 つだけです。

rule 'Check Person Salary'
when
    $p: Person(salary > 1000)
then
    //do whatever you want with $p
end

Person オブジェクトを挿入するたびに、ルールが評価されます。オブジェクトが評価に合格すると、そのルールの新しいアクティベーションが生成されます。fireAllRules() を呼び出すと、すべてのアクティベーションが実行されます: アクティベートされたルールの RHS が実行されます。もちろん、これは Drools と RETE アルゴリズムがどのように機能するかについての大まかな説明です。より正確な情報については、Drools のドキュメントを参照してください。

それが役に立てば幸い、

于 2013-04-26T11:26:49.287 に答える