Ich benutze Optaplanner 6.2Finale Version und alles funktioniert gut außer dem Operator stimmt. Um mehr zu erklären, das ist meine Regel.Drools Regel Betreiber passt funktioniert nicht in Optaplanner 6.2Final
rule "TEST REG EXP OPERATOR"
when
$cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")
then
scoreHolder.addSoftConstraintMatch(kcontext, 1);
end
Das Folgende ist die Ausnahme ausgelöst:
Exception in thread "main" [Error: unable to resolve method: com.app.test.domain.Cheese.$cheese() [arglength=0]]
[Near : {... $cheese.type ~= "(Buffulo)?\\S*Mozarella" ....}]
Hinweis: Wenn ich $ Käse entfernt. Erklärung vor Typ, hat die Regel kein Problem. Dies funktioniert gut:
$cheese:Cheese($cheese.type == "Buffulo")
Alle Vorschläge würden wir uns freuen.
UPDATE: Es stellt sich heraus, dass die folgende Ausnahme nur auf der drools Core-Version 6.2.0.Final und 6.3.0.Final wirft, nachdem ich Überprüfung auf ganzer Version getan. Es funktioniert in den restlichen Versionen.
$cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")
Auch zu verwenden gewesen, wenn es nichts offensichtlich falsch mit Ihrem Code, mit einer Variablen auf dem Muster, das Sie sich gerade befinden eines seiner Attribute zuzugreifen, ist kein gemeinsames Muster (und ich don Ich sehe keinen Vorteil. Hast du das versucht? '$ Käse: Käse (Typ passt" (Buffulo)? \\ S * Mozarella ")' –
Ja, es funktioniert, wenn ich $ Käse verwende: Käse (Typ passt "(Buffulo)? \\ S * Mozare lla"). Allerdings verstehe ich nicht, warum es nicht möglich ist, Variablen zu verwenden. Wie können wir die folgende Bedingung erreichen? $ cheese1: Käse (Typ passt "(Buffulo)? \\ S * Mozarella") $ cheese2: Käse ($ cheese1.name stimmt mit "A. *" überein, id> $ cheese1.id) –
Wenn die 'name' Bedingung ist Wenn es um den ersten 'Cheese' geht, dann verschiebe es zum ersten Muster:' $ cheese1: Cheese (type matches "(Buffulo)? \\ SMozare lla", Name stimmt mit "A. *" überein) $ cheese2: Cheese (id > $ cheese1.id) ' –