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