2009-05-26 6 views
1

Mit Drools 3.0.6 (alt, ich weiß), was ist eine effiziente Auswertung für das Finden einer Tatsache in einem bekannten, festen und ziemlich großen Array oder Sammlung (das Gegenteil von enthält, dh "ist in enthalten"). Die Verwendung einer OR-Reihe von normalen "equals" -Ergebnissen führt zu StackOverflowError, da das Array/die Sammlung einige tausend Einträge enthalten kann, da die binäre Operatorbewertung von Drools rekursiv ist.Efficient Drools Evaluation für Element in Array oder Sammlung

Wir haben einen einzelnen Wert Tatsache und ein Array von Werten zu entsprechen. Der aktuelle "Code" sieht so aus:

$f: Fact(name="TheFact", $data) 
eval(!($data.equals("1") || $data.equals("2") || $data.equals("3") ...)) 

für eine große Anzahl von festen Werten (1,2,3, ...). Ich suche etwas mehr wie "$ data in (1,2,3, ...)".

+0

reduzieren Können Sie ein Codebeispiel einfügen? –

+0

Wir haben einen einzelnen Wert Tatsache und ein Array von Werten zu entsprechen. Der aktuelle "Code" sieht folgendermaßen aus: $ f: Fakt (name = "TheFact", $ data) eval (! ($ Data.equals ("1") || $ data.equals ("2") || $ data.equals ("3") ...)) für eine große Anzahl fester Werte (1,2,3, ...). Ich suche etwas mehr wie "$ data in (1,2,3, ...)". – Mirvnillith

+0

Autsch, hinzugefügt, um die Frage auch. – Mirvnillith

Antwort

0

Manchmal müssen Sie (oder besser lesbar) einen Teil der Auswertung in das Objekt selbst einfügen. Dann können Sie die Eval-Anweisungen auf etwas wie eval(!$f.isInRange(1, 200))