Проблема со сбором слюней

у меня правило LHS такое

when 
    $location : Location() 
    $cabinets : ArrayList() from collect ( Cabinet() from $location.elements() )
then

когда я печатаю содержимое @cabinets в RHS, я вижу, что оно содержит все элементы (в том числе и те, которые не относятся к классу Cabinet).

Я хочу собирать только шкафы из $location>elements().

Что я сделал не так ?


person Łukasz Bownik    schedule 29.04.2009    source источник


Ответы (2)


Я думаю, вы бы сказали что-то вроде

Cabinet(class == Cabinet.class)

Я не думаю, что Drools выполняет явную проверку типов для классов кабинета, поскольку они у вас есть.

person LenW    schedule 29.04.2009
comment
после этого я получаю Невозможно создать значение поля типа «ValueType = 'Object'' и значение 'Cabinet.class': [Имя правила = Urządzenia bez szafy, AgendaGroup = MAIN, salience = 0, no-loop = false] java.lang.NoSuchFieldException: classUnable создать ограничение '[QualifiedIndentifierRestr: == Cabinet.class]' для поля 'класс' в правиле 'Urządzenia bez szafy': [Имя правила=Urządzenia bez szafy, AgendaGroup=MAIN, salience=0 , no-loop=false], так что это, вероятно, неправильно - person Łukasz Bownik; 29.04.2009

Ваш вопрос касается шаблона «от», а не «собирать».

Следующее правило должно помочь проверить:

when 
  $location : Location() 
  $cabinet : Cabinet() from $location.elements()
then

Это правило должно срабатывать для каждого кабинета в локации.

Вы можете попытаться опубликовать свой вопрос в списке пользователей правил.

person pgras    schedule 29.04.2009
comment
Да, но что, если мне нужно подсчитать количество собранных шкафов? - person Łukasz Bownik; 29.04.2009
comment
вот так - person Łukasz Bownik; 29.04.2009
comment
Конечно, тогда вам нужно будет использовать сбор, но проблема заключается в том, что «из» возвращает элементы из другого типа, чем «Кабинет». Итак, если у вас может быть "от" для возврата только шкафов, вы можете использовать сбор для создания ArrayList, содержащего только шкафы... - person pgras; 29.04.2009