首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定变量似乎被错误地识别为方法

绑定变量似乎被错误地识别为方法
EN

Stack Overflow用户
提问于 2019-08-20 15:27:46
回答 1查看 46关注 0票数 0

drl:

代码语言:javascript
复制
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());
end

java:

代码语言:javascript
复制
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();
    }
}

以下是确切的错误消息。

代码语言:javascript
复制
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的方法。这些代码片段有什么问题?我怎么才能修复它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 02:39:23

问题是您在not模式中绑定了$day。由于显而易见的原因,not (或exists)模式中的所有变量都是该模式的局部变量。我认为你正在尝试做的事情是这样的:

代码语言:javascript
复制
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

希望能有所帮助,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57568628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档