用Scala修改Drools中的事实

时间:2015-02-02 16:55:52

标签: scala drools

(Drools newbie here)我一直在寻找将对象(事实)加载到工作内存中并通过规则修改它们的方法。从我到目前为止发现的情况来看,我认为我应该在规则后果中使用“修改”指令,但却找不到相关内容。我还遇到了一个使用modifyObject的链接,该对象假定需要2个参数,将旧对象换成新对象[http://legacy.drools.codehaus.org/Working+Memory]

考虑到我正在使用Scala对象(即不可变),这是一种方法(缩回旧对象,插入新对象)?如果是这样,任何人都可以提供此类代码的示例吗?

1 个答案:

答案 0 :(得分:1)

我认为最好使用带有两个参数的update调用,即使你必须检索事实句柄:

 when
     $s: Sale(...)
 then
     Sale s = new Sale( $s,... );
     update( kcontext.getKieRuntime().getFactHandle( $s ), s );
 end

删除和插入可能会导致网络中的工作多于更新。

请注意,当修改不可用时,无法使用其他Drools功能。使用功能scala结合使用生产规则系统中的事实更新,该系统依赖于创建新激活的事实修改,这是一种相互矛盾的方法。