drl:
rule "adjectFreePeriods"
when
$studentGroupAndEduClass : StudentGroupAndEduClass($eduClasses : eduClasses)
not LectureOfEduClass(eduClass memberOf $eduClasses,
$day : day, $timeslotIndex : timeslotIndex, period != null
)
not LectureOfEduClass(eduClass memberOf $eduClasses,
$day == day, timeslotIndex == ($timeslotIndex + 1)
)
then
scoreHolder.addSoftConstraintMatch(kcontext,- $studentGroupAndEduClass.getStudents().size());
endjava:
public class LectureOfEduClass{
// ...
//omitted others
public Day getDay(){
if(period == null){
return null;
}
return period.getDay();
}
public int getTimeslotIndex() {
if (period == null) {
return Integer.MIN_VALUE;
}
return period.getTimeslot().getTimeslotIndex();
}
}以下是确切的错误消息。
Unable to Analyse Expression $day == day:
[Error: unable to resolve method using strict-mode: domain.LectureOfEduClass.$day()]
[Near : {... $day == day ....}]
^
Unable to Analyse Expression timeslotIndex == ($timeslotIndex + 1):
[Error: unable to resolve method using strict-mode: domain.LectureOfEduClass.$timeslotIndex()]
[Near : {... timeslotIndex == ($timeslotIndex + 1) ....}]
^ 根据显示的错误消息,引擎似乎错误地将这两个绑定变量作为POJO的方法。这些代码片段有什么问题?我怎么才能修复它呢?
发布于 2019-08-21 02:39:23
问题是您在not模式中绑定了$day。由于显而易见的原因,not (或exists)模式中的所有变量都是该模式的局部变量。我认为你正在尝试做的事情是这样的:
rule "adjectFreePeriods"
when
$studentGroupAndEduClass : StudentGroupAndEduClass($eduClasses : eduClasses)
not (
LectureOfEduClass(
eduClass memberOf $eduClasses,
$day : day,
$timeslotIndex : timeslotIndex, period != null
) and
LectureOfEduClass(
eduClass memberOf $eduClasses,
$day == day,
timeslotIndex == ($timeslotIndex + 1)
)
)
then
scoreHolder.addSoftConstraintMatch(kcontext,- $studentGroupAndEduClass.getStudents().size());
end希望能有所帮助,
https://stackoverflow.com/questions/57568628
复制相似问题