Слюни: Правило стрельбы дважды для одного и того же случая - PullRequest
0 голосов
/ 02 февраля 2019

Это правило срабатывает дважды, хотя есть только один подходящий случай.Я использую Drools 6.5.0.Финал.Глядя на журнал, он берет $ card2 как $ card1 и наоборот во втором раунде.

rule "Rule1"
salience 1
when
  $card1 : (used == false)
  $card2 : (used == false, number = $card1.number)
  exists Hand(name == name1)
  exists Hand(name == name2 || name == name3)
  not Hand(name == name4)

then
    $card1.setUsed(true); $card2.setUsed(true);
    insert(new Hand(name1, $card1, $card2));

end

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Атрибут No-Loop для правила гарантирует, что одно и то же правило не будет повторно инициировано при обновлении / изменении того же объекта, который используется в условии when, в операторе then.

Способ определениябез петель, как показано ниже:

rule "Rule1"
no-loop true
0 голосов
/ 04 февраля 2019

Прежде всего, твое правило выглядит уродливым для меня.Первые 2 шаблона не имеют своих типов, и есть переменные (то есть name1), которые никуда не приходят.

Во-вторых, помните, что LHS правил в Drools работает как оператор SQL,Если вы не укажете какую-либо связь между вашими шаблонами, будет использоваться декартово произведение их.

Надеюсь, это поможет

...