0

これは単純なはずですが、それでも私は迷っています。ここに非常によく似た投稿があります:マップ内のDroolsルール間でデータを共有する方法は? しかし、それは私の問題を解決しません:

一連のルールがあり、それらを起動する前に、事実としてMap <String、Object>を挿入します。これらのルールでは、マップを使用して次のような結論を記述します。

when
   $map : Map();
   something ocurrs;
then
   $map.put("conclusion1", 100);

ここで、これらの中間的な結論を他のルールで使用したいと思います。

when
   $map : Map(this["conclusion1"] > 50)
then
   do something cool;

問題は、ルールを実行すると、2番目のルールが最初のルールの結論を認識せず、実行されないように見えることです。ブレークポイントを設定して作業メモリーを分析しようとしましたが、実際、最初のルールが実行された後、マップには結論1、100が含まれます。結論としてupdate($ map)を作成してみましたが、無限ループが発生します。

なぜこれが機能しないのか、または私の問題に対する代替の解決策について何か考えはありますか?

ありがとう !

4

1 に答える 1

0

ファクトを変更するときは、そうしていることをエンジンに通知する必要があります。これを行う方法の 1 つは、modify() を使用することです。例えば:

when
   $map : Map();
   something ocurrs;
then
   modify( $map ) { 
      put("conclusion1", 100)
   }
end
于 2012-04-05T02:03:47.290 に答える