对象地图的求和值给出了错误

时间:2012-02-25 13:38:56

标签: drools

SubjectTeacherPeriodnum_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

错误是:

jesvin@Jesvin-Technovia:~/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的{​​{1}}(int)属性,我可以SubjectTeacherPeriod而不是向num_attribute_map.put("boringness",1)添加新属性。

SubjectTeacherPeriod关心特定的SumRegressionConstraint。该属性的值存储在$attribute的{​​{1}}中。我想访问num_attribute_map,但会出现此问题。

我做错了什么?


还有其他方法让动态属性起作用吗?

1 个答案:

答案 0 :(得分:1)

目前,您无法将变量绑定到表达式,只能绑定到字段名称。所以不要将它绑定到:

$total : num_attribute_map[$attribute]

绑定到:

$total : num_attribute_map

然后,您可以在函数上使用表达式。如果您使用的是MVEL方言:

sum( $total[$attribute] )

或者如果您使用的是java方言:

sum( $total.get($attribute) )