1

我正在尝试将现有的基于 ILOG JRules 的应用程序迁移到基于 Drools 的项目。在 ILOG 中,我们有局部变量(和变量集),可用于计算和存储规则(公式)中的中间值。

Drools 中是否有等效的局部变量?我知道我们在 Drools 中有全局变量,但文档建议仅将全局变量用作只读常量,并将 Java 调用类之间的数据传递给规则:

强烈建议不要从规则内部设置或更改全局值。我们建议您始终使用工作内存接口从您的应用程序中设置值。

一种方法是编写一个自定义 java 类Variable并在其中声明所有变量并在 drools 规则中使用它。但这每次我们想要添加一个新变量时都需要更改 java 代码。

是否有任何可行的方法来定义和使用 Drools 中可以在规则内定义和更改的变量?

4

1 回答 1

1

我认为使用全局变量在规则之间保持某种计算或状态没有任何问题。我认为 Drools 的文档试图表达的意思(以一种非常复杂和不清楚的方式)是你永远不应该在规则的 RHS 中使用全局变量,因为 Drools 不知道全局变量的值何时发生变化。如果您确实在约束中使用了全局变量,那么请确保您永远不会更改它们的值。话虽如此,我认为在规则的 RHS 中使用全局变量是无害的。如果您对这个想法不满意,那么您也可以在会话中插入“计算”对象作为事实。规则可以匹配这个事实,将一个变量绑定到它,然后在 RHS 中与之交互。

希望能帮助到你,

于 2013-03-01T15:22:06.320 回答