Как избежать петель в Drools без использования атрибута NO-LOOP?

1

Есть ли какой-либо возможный способ избежать цикла без использования атрибута NO-LOOP для Drools (Как я слышал, мы можем достичь этого, используя оператор not (!) На объектах, но я не могу это выяснить).

Проблема заключается в том, что атрибут NO-LOOP не может использоваться (поскольку это требование), поэтому обратитесь к приведенному ниже правилу и сообщите, что можно избежать цикла.

TestClass.java

public class TestClass{
     private String name;
     private int age;

// Few other variables
// their getters and setters

}

правила

rule "abc"
    when 
        $obj : TestClass(name=="test", age != 20)
    then 
        TestClass $obj2 = new TestClass();
        $obj2.setName("test");
        $obj2.setAge(30);
        insert($obj2);
end
  • 1
    Наилучшая стратегия, позволяющая избежать циклов, - включить ограничение, перехватывающее значение, достигаемое кодом RHS.
Теги:
drools
rules

1 ответ

2
Лучший ответ

Не знаю, почему некоторые люди так боятся no-loop. Это существует по вполне веской причине. т.е. Он инструктирует движок не переоценивать правило, если причина такой переоценки обусловлена модификациями или вставками в этом правиле.

Однако вы можете сделать это вручную через свою собственную логику. Просто вставьте соответствующий факт и совпадение с ним не существует.

declare IsTested
    name: String
end

rule "abc"
when 
    $obj : TestClass($name: name=="test", age != 20)
    not IsTested(name == $name)
then 
    TestClass $obj2 = new TestClass();
    $obj2.setName("test");
    $obj2.setAge(30);
    insert($obj2);
    insert(new IsTested($name));
end

Некоторое время назад Эстебан Аливерти написал сообщение в блоге об общих шаблонах, чтобы избежать бесконечных циклов в Drools. Это стоит прочитать.

  • 0
    Спасибо @Steve - Это прекрасно работает. Хотя я на самом деле использовал лист Excel, поэтому потребовалось некоторое время, чтобы понять, как реализовать это с помощью листа Excel.
  • 0
    Я бы порекомендовал блог Эстебана на эту тему, чтобы узнать все плюсы и минусы различных решений ilesteban.wordpress.com/2012/11/16/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню