我是 Drools 的新手,正在尝试让示例程序正常工作。 drools 文档 http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/index.html#d0e9542 中给出了此示例。 这个流口水的规则预计可以对整数进行排序。我刚刚更改了示例中给出的数字,但它们没有按预期排序。 尝试使用drools版本5.5.0、5.5.1和master 6.0.0,但得到了相同的错误结果。
主要代码如下:
package com.sample; public class Example2 { public static void main(String[] args) throws Exception { Number[] numbers = new Number[] { wrap(5), wrap(6), wrap(4), wrap(1), wrap(2) }; new RuleRunner().runRules(new String[] { "Example3.drl" }, numbers); } private static Integer wrap(int i) { return new Integer(i); } }
RuleRunner 类与示例中给出的相同,我认为我不应该在这里给出它,因为它会使问题变得困惑。它只是创建知识库、有状态 session ,插入上面“numbers”数组中给定的事实,然后在 session 上调用 fireAllRules 方法。
规则文件(Example3.drl)是:
规则“规则 04”
方言“mvel”
当
$数字:数字()
不是 Number(intValue < $number.intValue)
那么
System.out.println("找到的数字,值为:"+ $number.intValue());
撤回($number);
结束
我得到的输出如下:
Loading file: Example3.drl Inserting fact: 5 Inserting fact: 6 Inserting fact: 4 Inserting fact: 1 Inserting fact: 2 Number found with value: 1 Number found with value: 4 Number found with value: 2 Number found with value: 5 Number found with value: 6
不是正确的预期升序排序顺序。
我可能做错了什么?我无法想象 drools 规则引擎会在这个基础级别上被破坏。
最佳答案
这似乎是 5.5.0 以后引入的错误,并且仍然存在。
此排序代码适用于 5.4.0。
解决方法:
而不是:
“not Number(intValue < $number.intValue)”
如果您使用:
“not Number(intValue() < $number.intValue) )"
然后就可以了。
未告知其是函数的非 getter 方法似乎会产生问题。
一个令人衰弱的问题,会降低评估阶段对产品的信心。
关于drools - Drool 无法正确对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372663/