论坛首页 Java企业应用论坛

请教一下Drools中DRL的语法

浏览 5332 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-04  
我在写DRL时遇到了问题,相同的测试,脚本一可以匹配通过而脚本二却不能。我只是在脚本二中加了一个 OR的关系。

我的测试中 due="0" flag="N"

脚本一
package calculate;
import test.Wrapper;

rule "TK_1000000587_TR_7"
        salience 1
        when
            c:Wrapper( due == "0")
            c:Wrapper( flag == "N" )
        then
            c.setResult("TT");
end


脚本二
package calculate;
import test.Wrapper;

rule "TK_1000000587_TR_7"
        salience 1
        when
            c:(Wrapper( due == "0") || Wrapper( due == "1"))
            c:Wrapper( flag == "N" )
        then
            c.setResult("TT");
end
   发表时间:2007-06-04  
测试了一下,确实有这个问题,mailing-list里面也没有找到想关的解决办法。
0 请登录后投票
   发表时间:2007-06-07  
gtivan 写道
我在写DRL时遇到了问题,相同的测试,脚本一可以匹配通过而脚本二却不能。我只是在脚本二中加了一个 OR的关系。

我的测试中 due="0" flag="N"

脚本一
package calculate;
import test.Wrapper;

rule "TK_1000000587_TR_7"
        salience 1
        when
            c:Wrapper( due == "0")
            c:Wrapper( flag == "N" )
        then
            c.setResult("TT");
end


脚本二
package calculate;
import test.Wrapper;

rule "TK_1000000587_TR_7"
        salience 1
        when
            c:(Wrapper( due == "0") || Wrapper( due == "1"))
            c:Wrapper( flag == "N" )
        then
            c.setResult("TT");
end


不行的话就改用eval吧!尽管它效率有点低,不过遇到一些普通方式不能解决的问题,用它总能比较容易地解决。
0 请登录后投票
   发表时间:2007-06-07  
eval是个办法
调试看了下workingmemory,带 or condition 规则生成的是joinNode,两边对于同一个实例的判断是无效的,不知道为什么,
而不带or condition 的规则生成的是alphaNode,没有问题。
期待dada给分析下。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics