Концептуальное значение ключевого слова not;оценка между объектами - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь найти объект BucketTotal, который имеет наименьшее значение total в проекте Drools Planner.Я адаптировал это из примера кода.

rule "insertMinimumBucketTotal"
when
   $b : BucketTotal($total : total)
   not BucketTotal(total > $total) // CONFUSED HERE
then
   insertLogical(new MinimumBucketTotal($total));
end

Что касается моих рассуждений, это означало "найти BucketTotal объект $b, такой, что не существует другого BucketTotal объекта, чей total больше total из $b ".

Оказывается, это означало обратное (и я исправил это).


Пожалуйста, объясните, как Drools мотивирует это утверждение найти $b.

1 Ответ

3 голосов
/ 10 февраля 2012

Действительно, вы путаете. «не» означает «не существует». Поэтому, если вы хотите найти минимальную сумму, которую вы можете сделать:

rule "minimum"
when
   BucketTotal( $min : total )
   not BucketTotal( total < $min )
then
   // do something with $min
end

Выше, как правило, более эффективный способ сделать это, но вы также можете использовать накопить, если вы предпочитаете:

rule "minimum"
when
    accumulate( BucketTotal( $total : total ),
                $min : min( $total ) )
then
    // do something with $min
end
...