Drools:多个匹配规则

时间:2017-02-07 01:27:40

标签: drools

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

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关键字有什么作用?

1 个答案:

答案 0 :(得分:1)

如果Drools Engine要根据修改后的事实对象的新值重新评估规则,则必须使用

modify(或update)。省略此操作不会触发约束与新值匹配的规则。

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

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

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

Input( ..., z != 3 )

Input( ..., z != 9 )
分别为

,它将起作用,你甚至不再需要无循环。