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