2017-02-07 2 views
0

У меня есть простое правило случай здесь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? Что делает ключевое слово изменения?

ответ

1

необходимо изменить (или обновить), если Drools Engine пересматривает правила в соответствии с новым значением для измененного объекта факта. Опущение этого не приведет к появлению правил, в которых ограничения соответствуют новому значению.

Для этих двух правил изменение не требуется. Но если есть правило

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

вам придется использовать его. В этом случае добавить ограничения к вашим правилам:

Input(..., z != 3) 

и

Input(..., z != 9) 

соответственно, и она будет работать, и вы даже не нуждаетесь ни в петле больше.

Смежные вопросы