2012-02-09 2 views
0

Я пытаюсь найти объект 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.

ответ

2

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

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 
Смежные вопросы