Drools规则输入不匹配求助:ERR 102错误排查
解决Drools规则中的ERR 102输入不匹配问题
嘿,我一眼就瞅出问题所在了——你的规则代码里有好几处未闭合的括号,把Drools的语法解析器搞晕了,才会抛出ERR 102这种输入不匹配的错误。咱们来逐个修正:
原代码里的语法坑
- 第一行
accumulate调用没收尾:$transfers1: Number() from accumulate( CloudRoute(bus == $bus1, count(1))—— 这里少了俩右括号:一个是CloudRoute()的闭合括号,另一个是accumulate()的闭合括号。 - 第51行的
accumulate同样有问题:CloudRoute(bus == $bus2, count(1)—— 不仅CloudRoute()没闭合,accumulate()也没写完结尾的括号。
这些遗漏的括号直接打乱了解析器对规则结构的判断,让它错误地把$transfers2当成了无效输入。
修正后的完整规则代码
rule "balanceTransfers" when $bus1 : CloudBus(); $bus2 : CloudBus(id > $bus1.id); $transfers1: Number() from accumulate( CloudRoute(bus == $bus1), count(1) ); $transfers2: Number() from accumulate( //<-第51行 CloudRoute(bus == $bus2), count(1) ); then scoreHolder.addSoftConstraintMatch(kcontext, -Math.abs($transfers1 - $transfers2)); end
修正细节说明
- 每个
accumulate函数的正确格式是:accumulate( 匹配的事实, 聚合函数 ),所以得给CloudRoute()和accumulate()都补上闭合括号。 - 规则的每个条件语句结尾别忘了加
;,这能帮解析器清晰区分不同的条件元素,避免混淆。
把代码改成这样之后,Drools就能正常解析你的规则了,ERR 102的错误也会消失~
内容的提问来源于stack exchange,提问作者Dionysis.B
相关产品推荐
相关产品推荐

