0

这应该很简单,但我还是迷路了。这里有一个非常相似的帖子:How to share data between Drools rules in a map? 但它不能解决我的问题:

我有一套规则,在启动它们之前,我插入一个 Map<String, Object> 作为事实。在这些规则中,我使用地图来写一些结论,例如:

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

现在我想在其他规则中使用这些中间结论,例如:

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

问题是当我执行规则时,就像第二个规则看不到第一个规则的结论,并且它不会触发。我尝试设置一个断点并分析工作内存,事实上,在触发第一条规则后,Map 将包含结论 1, 100。我还尝试在结论中进行更新($map),但这会触发无限循环。

知道为什么这不起作用,或者我的问题有任何替代解决方案吗?

谢谢 !

4

1 回答 1

0

当您修改事实时,您需要通知引擎您正在这样做。其中一种方法是使用 modify()。例如:

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