Как разорвать петли в Drools, диалекте мвел?

В приведенном ниже правиле логика в then-части выполняется для всех дочерних объектов, которые передают данное условие, я хочу прервать цикл после логики в then-часть выполняется только один раз, как это сделать

rule "test"
            when
                Parent( $childList : childList != null, childList.empty == false)
                Child('testing'.equalsIgnoreCase(attribute)) from $childList
            then
                // testLogic
end
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
540
2

Ответы 2

Если вам не нужна ссылка на объект Child (или любой из его атрибутов) в RHS, вы можете использовать оператор exists:

rule "test"
when
 Parent( $childList : childList != null, childList.empty == false)
 exists Child('testing'.equalsIgnoreCase(attribute)) from $childList
then
 // testLogic
end

Если по какой-то причине вам нужен объект Child или любой из его атрибутов, вы можете сделать что-то вроде этого (хотя это не очень хорошо):

rule "test"
when
 Parent( $childList : childList != null, childList.empty == false)
 $c: Child('testing'.equalsIgnoreCase(attribute)) from $childList.get(0)
then
 // testLogic
end

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

Хорошо. Не могли бы вы отметить вопрос как отвеченный? Спасибо

Esteban Aliverti 07.08.2018 08:20

Причина бесконечного цикла должна быть известна путем определения того, является ли он самозависимым или сложным.

  • Изменение факта в правиле активирует то же правило (Я)
  • Изменение факта в правиле активирует другое правило (сложное) и активирует исходное правило.

Вы можете использовать 'no-loop' рядом с именем правила как no-loop true

Вы также можете ограничить, используя группу повестки дня, проверяя условия или как флаг. Это зависит от вашей сложности.

Вопрос не в бесконечных циклах, а в том, как запустить один раз, когда у вас несколько активаций.

Esteban Aliverti 06.08.2018 17:14

Другие вопросы по теме