1
我试图用这样的规则:属性访问问题
rule "conformSyncConstraint"
when
$syn_con : SyncConstraint(
$left_stp_period : leftSTP.period,
$right_stp_period : rightSTP.period)
eval(($left_stp_period.dayOfWeek == $right_stp_period.dayOfWeek &&
$left_stp_period.dayOrder == $right_stp_period.dayOrder) == false)
then
insertLogical(new IntConstraintOccurrence("conformSyncConstraint",
ConstraintType.NEGATIVE_HARD,
1,
$syn_con));
end
但我面对这个错误,这似乎是一个黑盒子:
Rule Compilation error : [Rule name='conformSyncConstraint']
in/co/technovia/timetabler/domain/Rule_conformSyncConstraint_4401252830cd4ee7bc49416ead3da86c.java (8:1459) : The field Period.dayOfWeek is not visible
in/co/technovia/timetabler/domain/Rule_conformSyncConstraint_4401252830cd4ee7bc49416ead3da86c.java (8:1490) : The field Period.dayOfWeek is not visible
at org.drools.planner.config.solver.SolverConfig.buildRuleBase(SolverConfig.java:238)
at org.drools.planner.config.solver.SolverConfig.buildSolver(SolverConfig.java:170)
at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:103)
at in.co.technovia.timetabler.TimeTableApp.createSolver(TimeTableApp.java:61)
at in.co.technovia.timetabler.TimeTableApp.main(TimeTableApp.java:45)
这是怎么回事错在这里?
你能否澄清时使用eval?我在[我问到的问题]中了解到了这个问题[http://drools.46999.n3.nabble.com/Cant-check-complex-boolean-expressions-with-Collections-disjoint-td3842259.html] when [an answer你给我](http://stackoverflow.com/a/9241089/604511)没有工作。那我做错了什么?我还没有尝试它:我的工作时间是12小时:-) – aitchnyu 2012-04-02 17:07:39
直到Drools 5.2,当使用更复杂的表达式作为约束时,或者当您的约束需要方法调用时,您必须使用evals(),因为DRL语言不支持这些构造,所以eval允许用户回退到Java或MVEL来写下复杂的约束。 Drools 5.3改进了对自由格式约束的支持,5.4基本上不需要evals了,因为任何布尔约束都可以直接编写。但是,重要的是要记住,形式为“”的约束仍然具有更好的性能。 (继续...) –
2012-04-02 17:50:03
(...继续之前的评论)我们正在努力改进5.4+中越来越复杂表达式的索引和JITing,但保持简单始终对引擎和可读性和维护都更好规则。 – 2012-04-02 17:51:59