Pregunta

Uso Drools 3.0.6 (viejos, lo sé), lo que es una evaluación eficiente para encontrar un hecho en un conocido, fijo y bastante grande matriz o colección (la inversa de contiene, es decir, "está contenido en"). El uso de una serie OR de normal "es igual a" resultados en StackOverflowError como la matriz / colección pueden contener unos pocos miles de entradas, como la evaluación Drools operador binario es recursivo.

Tenemos un solo hecho de valor y una matriz de valores para que coincidan. El "código" actual es el siguiente:

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

para un gran número de valores fijos (1,2,3, ...). Busco algo más parecido a "$ data de (1,2,3, ...)".

¿Fue útil?

Solución

En ocasiones resulta necesario (o que es más legible a) poner un poco de la evaluación en el objeto en sí. A continuación, puede reducir las declaraciones eval a sometihng como eval(!$f.isInRange(1, 200))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top