A SubjectTeacherPeriod
имеет num_attribute_map
, который представляет собой карту, которая отображает определенные атрибуты (например, «скучность») с их соответствующими оценками. Я использую следующий код, чтобы суммировать атрибуты (например, «скучность») в течение каждого дня недели.Суммирующие значения карты объекта дают мне ошибки
Но определенная строка вызывает ошибку.
rule "insertAttributeDayTotal"
//salience 1 // Do these rules first (optional, for performance)
when
$sum_regression_constraint : SumRegressionConstraint(
$class : class_,
$attribute : attribute//,
//$weight : weight;
)
$day_of_week : DayOfWeek()
$attribute_day_total : Number() from accumulate(
SubjectTeacherPeriod(
//period != null,
period.class_ == $class,
period.dayOfWeek == $day_of_week,
$total : num_attribute_map[$attribute] //PROBLEM LINE
),
sum($total)
)
then
//System.out.println("BUCKET TOTAL "+$id+" "+$bucket_total.intValue());
insertLogical(new AttributeDaySum($class, $attribute, $day_of_week, $attribute_day_total.intValue()));
end
Ошибка:
[email protected]:~/dev/drools/timetabler$ java -server in.co.technovia.timetabler.TimeTableApp
Exception in thread "main" java.lang.IllegalStateException: There are errors in the scoreDrl's:
Variables can not be used inside bindings. Variable [$attribute] is being used in binding 'num_attribute_map[$attribute]' : [Rule name='insertAttributeDayTotal']
Rule Compilation error : [Rule name='insertAttributeDayTotal']
in/co/technovia/timetabler/domain/Rule_insertAttributeDayTotal_bb39fd28b3c8457cb8d86fc15b34a0e7.java (7:905) : Syntax error on token "null", invalid Type
in/co/technovia/timetabler/domain/Rule_insertAttributeDayTotal_bb39fd28b3c8457cb8d86fc15b34a0e7.java (9:1050) : $total cannot be resolved
SubjectTeacherPeriod
имеет любопытную num_attribute_map
, так что я могу определить атрибуты во время выполнения. Если бы мне нужен атрибут boringness
(int) для SubjectTeacherPeriod
, я могу сделать num_attribute_map.put("boringness",1)
вместо добавления нового атрибута в SubjectTeacherPeriod
.
A SumRegressionConstraint
заботится о конкретном $attribute
. Значение этого атрибута хранится в num_attribute_map
от SubjectTeacherPeriod
. Я хочу получить доступ к num_attribute_map[$attribute]
, но эта проблема возникает.
Что я делаю неправильно?
Есть ли другой способ заставить динамические атрибуты работать?
Пожалуйста уточюните: это просуммировать 'num_attribute_map [$ атрибут]' от ** отчетливого ** ' Объекты SubjectTeacherPeriod'? – aitchnyu
Да, поведение такое же. Функция будет выполняться для каждого объекта SubjectTeacherPeriod, и вы можете написать любое выражение в нем. например: sum ($ x [$ y] + 2 * $ foo.bar). Просто случается, что обычно люди используют простое выражение, например sum ($ x). –