【问题标题】:Drools: multiple matching rulesDrools:多个匹配规则
【发布时间】:2017-02-07 01:27:39
【问题描述】:

我这里有一个简单的规则案例

salience 50
no-loop true
rule "1"
    when
        input: Input(a == 20, b == 16026)
    then
        modify(input) {setZ(3)}
end

salience 40
no-loop true
rule "2"
    when
        input: Input(a == 20, c == 209)
    then
        modify(input) {setZ(9)}
end

如果我保持上述规则不变,它们会进入一个连续循环。 但是,如果我从以下位置修改这两个规则:

modify(input) {setZ(9)}

到:

input.setZ(9);

然后规则按预期顺序执行。

我的问题是:我需要使用 modify 关键字吗? modify 关键字有什么作用?

【问题讨论】:

    标签: drools


    【解决方案1】:

    如果 Drools 引擎要根据修改后的事实对象的新值重新评估规则,则必须使用修改(或更新)。省略它不会触发约束与新值匹配的规则。

    对于这两个规则,不需要修改。但如果有规律

    rule x
    when
      Input( z == 9 || == 3 )
    then ... end
    

    你必须使用它。在这种情况下,为您的规则添加约束:

    Input( ..., z != 3 )
    

    Input( ..., z != 9 )
    

    分别,它会工作,你甚至不再需要 no-loop。

    【讨论】:

    • 我有 3 个条件,我想将这些条件转换为 3 个不同的规则,并在所有规则匹配时修改值。我怎样才能实现?
    猜你喜欢
    • 2011-09-24
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多