我正在尝试将现有的基于ILOG JRules的应用程序迁移到基于Drools的项目。在ILOG中,我们有局部变量(和变量集),可用于计算和存储规则(公式)中的中间值。
在Drools中有等效的局部变量吗?我知道我们在Drools中有全局变量,但文档建议仅将全局变量用作只读常量,并在Java调用类之间传递数据到规则:
强烈建议在内部设置或更改全局值你的规则。我们建议您始终从您的使用工作记忆接口的应用程序。
一种方法是编写一个自定义java类Variable
,并声明其中的所有变量,并在drools规则中使用它。但是,每次我们想要添加一个新变量时,都需要修改java代码。
是否有可行的方法在Drools中定义和使用变量,这些变量可以在规则中定义和更改?
我不认为使用全局变量在规则之间保持某种计算或状态有什么不对。我认为Drools的文档试图说的是(以一种非常复杂和不清楚的方式),您不应该在规则的RHS中使用全局变量,因为Drools不知道全局变量的值何时发生变化。如果您在约束中使用全局变量,那么请确保永远不要更改它们的值。说到这里,我认为在规则的RHS中使用全局变量是无害的。如果您对这个想法感到不舒服,那么您也可以将"计算"对象作为事实插入到会话中。规则可以匹配这个事实,将变量绑定到它,然后在RHS中与它交互。
希望有帮助,