#drools
#drools
Вопрос:
Я хочу использовать ключевое слово ‘in’ в функции ‘eval’, в которой я получаю сообщение об ошибке, что ‘in’ не распознается drools. Итак, у меня есть несколько значений, которые я хочу проверить на соответствие конкретному атрибуту факта
when
$person : Person(PIN in ("123","456","789"))
then
//do something
end
// Вот так я хочу использовать его в eval
when
$person : Person()
eval($person.PIN in ("123","456","789"))
then
//do something
end
Но он показывает ошибку времени компиляции.
есть ли какой-либо другой способ сделать это.
Отредактировано
Итак, у меня есть некоторые условия в таблице решений, где я хочу использовать eval, потому что другие способы не помогают в моем сценарии, ниже снимок объяснит
Снимок 1: таблица решений без eval ()
Снимок 2: таблица решений с eval ()
- Проблема в первом снимке: при компиляции электронной таблицы условие переходит к объекту второй строки, как показано ниже. код: вот как он интерпретируется
when
personMap : PersonMap ()
basicEligiblePerson : Person( personalAddress.PIN in ($param) ) from
personMap.AddressesList
addresses : Address() from basicEligiblePerson.AddressesList
personalAddress : PersonalAddress() from addresses.PersonalAddress
then
basicEligiblePerson.setEligibility(true);
end
- Проблема во втором снимке :
При компиляции этой электронной таблицы условие переходит к функции eval (), но ключевое слово ‘in’ не работает в eval ().
when
personMap : PersonMap ()
basicEligiblePerson : Person( personalAddress.PIN in ($param) ) from
personMap.AddressesList
addresses : Address() from basicEligiblePerson.AddressesList
personalAddress : PersonalAddress() from addresses.PersonalAddress
eval( personalAddress.PIN in ($param) )
then
basicEligiblePerson.setEligibility(true);
end
что мне делать?
Ответ №1:
Первый образец, приведенный в вашем вопросе, достаточен для проверки. Вам не нужно использовать eval.
when
$person : Person(PIN in ("123","456","789"))
then
//do something
end
Если ваше требование состоит в том, чтобы установить приемлемость в true для заданного набора выводов, то вам действительно не нужна таблица решений. Я не совсем понимаю вашу структуру POJO, поэтому, если у класса Person есть переменная-член AddressList, а у класса AddressList есть член personalAddress, у которого есть переменная-член pin, вы можете добиться результатов, используя следующее правило. Пожалуйста, обратите внимание, что на вложенные поля ссылаются с использованием имен переменных-членов, а не имен классов. Также, когда вы обращаетесь к вложенным элементам, если какой-либо из элементов может быть нулевым, пожалуйста, добавьте проверку null, чтобы избежать исключений с нулевым указателем.
when
$basicEligiblePerson : Person( addressesList.personalAddress.pin in ("1234", "4567") )
then
$basicEligiblePerson.setEligibility(true);
end
Комментарии:
1. Да, пожалуйста, не используйте eval. Вы не должны использовать eval.
2. Приведенное выше является лишь небольшим примером того, что я делаю. но фактическая работа довольно большая. поэтому я должен использовать таблицу решений. (и это тоже требование)