3

我是 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,但得到相同的错误结果。

以下是主要代码:

    包 com.sample;

    公共类示例2 {
      公共静态 void main(String[] args) 抛出异常 {
        Number[] numbers = new Number[] { wrap(5), wrap(6), wrap(4), wrap(1), wrap(2) };
        new RuleRunner().runRules(new String[] { "Example3.drl" }, numbers);
      }

      私人静态整数换行(int i){
        返回新整数(i);
      }
    }

RuleRunner 类与示例中给出的相同,我认为我不应该在这里给出它,因为它会使问题变得混乱。它只是创建知识库、有状态会话,插入上面“数字”数组中给出的事实,然后在会话上调用 fireAllRules 方法。

规则文件(Example3.drl)是:


rule "Rule 04"
    dialect "mvel"
  when
    $number : Number()
    not Number(intValue < $number.intValue)
  then
    System.out.println("Number found with value: " + $number.intValue());
    收回($数字);
结尾

我得到的输出如下:

加载文件:Example3.drl
插入事实:5
插入事实:6
插入事实:4
插入事实:1
插入事实:2
找到值的数字:1
找到值的数字:4
找到值的数字:2
找到值的数字:5
找到值的数字:6

不是正确的预期升序排序。

我可能做错了什么?我无法想象 drools 规则引擎会在这个基本级别上被打破。

4

1 回答 1

1

这似乎是从 5.5.0 开始引入的错误,并且仍然存在。
此排序代码适用于 5.4.0。

解决方法:


而不是:
  “not Number(intValue < $number.intValue)”
如果你使用:
  “not Number(intValue() < $number.intValue)”
那么它可以工作。



不告诉它是函数的非 getter 方法似乎会产生问题。

在评估阶段降低对产品的信心的令人衰弱的问题。

于 2013-01-18T05:03:30.307 回答