Drools变量绑定:不允许重新分配
假设Drools变量绑定:不允许重新分配,drools,Drools,假设MyObject是一个Java对象,具有名为integerProperty的整数属性。 我想写一个Drools规则,如下所示(语法错误): 当有一组超过10个类型为MyObject的元素,其integerProperty值形成算术序列时,我想触发我的规则,例如1,2,3,…在这种情况下,我将为HardMediumSoftLongCore对象指定一个负值(希望这些信息能有所帮助) 我确信具有给定的integerProperty的MyObject是唯一的(例如,只有一个MyObject具有int
MyObject
是一个Java对象,具有名为integerProperty
的整数属性。
我想写一个Drools规则,如下所示(语法错误):
当有一组超过10个类型为MyObject
的元素,其integerProperty
值形成算术序列时,我想触发我的规则,例如1
,2
,3
,…在这种情况下,我将为HardMediumSoftLongCore
对象指定一个负值(希望这些信息能有所帮助)
我确信具有给定的
integerProperty
的MyObject
是唯一的(例如,只有一个MyObject
具有integerProperty
等于,比如说,2
)。问题是不允许我重新分配变量binding$integerProperty
。有没有办法解决这个问题?尝试实现下面的示例,并检查是否获得了所需的输出。在触发规则之前,将上一个对象作为全局变量插入(在下面的示例中为prev)在流口水的时候
global MyObject prev;
rule "myRule"
when
$total : Number(doubleValue > 10) from accumulate(
$o : MyObject( prev.getIntegerProperty() != null && $i : integerProperty == prev.getIntegerProperty() + 1),
init( double total = 0;),
action( total += 1; ),
reverse( total -= 1; ),
result( new Double( total ) ) )
then
[BLABLABLA]
end
在启动规则之前,在java代码中,将前一个对象设置为全局对象。按照以下代码操作:
kieSession.setGlobal("prev",myprevobject)
kieSession.insert(myobject)
kieSession.fireAllRules()
你能解释一下你的要求吗?据我所知,你正在积累一个有序的对象序列,当累加器的值大于10时,你想做些什么。你能提供更多的细节吗?我试图编辑这个问题,希望它能帮上忙!谢谢你的兴趣!你想像一组滚动的对象一样积累对象吗对象或翻滚分组?对不起,我遗漏了一些内容。请解释一下区别。翻滚意味着该窗口中的对象数将被分组,窗口将根据窗口大小进行移动,而在滑动的情况下,窗口将滑动1。例如,假设您的窗口长度为5;在翻滚窗口中windows对象在第一个窗口中将是o1、o2、o3、o4、o5,然后第二个窗口将有o6、o7、o8、o9、o10,但在滑动窗口的情况下,第一个窗口内的对象是o1、o2、o3、o4、o5,第二个窗口中的对象是o2、o3、o4、o5、o6。请您再解释一点好吗?您的意思是t中必须有一个
全局MyObject prev
他.drl
文件?在上面的代码中,我在哪里将其设置为具有所需属性的上一个MyObject
?抱歉,但我对Drools很陌生。上面的规则满足您的要求吗?不,它不能正常启动。规则引擎无法识别prev
。
kieSession.setGlobal("prev",myprevobject)
kieSession.insert(myobject)
kieSession.fireAllRules()