我正在使用Optaplanner 6.2Final版本和一切工作正常,除了匹配運算符。 解釋更多,這是我的規則。Drools規則運算符匹配不適用Optaplanner 6.2Finalinal
rule "TEST REG EXP OPERATOR"
when
$cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")
then
scoreHolder.addSoftConstraintMatch(kcontext, 1);
end
以下是拋出的異常:
Exception in thread "main" [Error: unable to resolve method: com.app.test.domain.Cheese.$cheese() [arglength=0]]
[Near : {... $cheese.type ~= "(Buffulo)?\\S*Mozarella" ....}]
注意:如果我刪除$奶酪。類型前面的聲明,規則沒有問題。這工作正常:
$cheese:Cheese($cheese.type == "Buffulo")
任何意見,將不勝感激。
UPDATE: 事實證明,以下拋出異常,僅在Drools的核心版本6.2.0.Final和6.3.0.Final我做檢查的所有版本之後。它在其他版本中工作。
$cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")
即使沒有什麼明顯錯誤的代碼,使用您目前的模式的變量來訪問它的屬性之一是不常見的模式(和我不沒有任何優勢)。你試過這個嗎? '$奶酪:奶酪(類型匹配「(Buffulo)?\\ S * Mozarella」)' –
是的,它工作,如果我使用$奶酪:奶酪(類型匹配「(Buffulo)?\\ S * Mozarella」 )。但是,我不明白爲什麼它不能允許使用變量。我們如何才能達到以下條件? $ cheese1:奶酪(類型匹配「Buffulo」)\\ S * Mozarella「) $ cheese2:奶酪($ cheese1.name匹配」A. *「,id> $ cheese1.id) –
如果'name'條件如果關於第一個「奶酪」,然後將其移動到第一個模式:「$ cheese1:奶酪(類型匹配」(Buffulo)?\\ SMozare lla「,名稱匹配」A. *「)$ cheese2:奶酪(id > $ cheese1.id)' –