Domanda

Utilizzando Drools 3.0.6 (vecchi, lo so), che cosa è una valutazione efficace per la ricerca di un fatto in una nota, fissa e abbastanza grandi array o di raccolta (l'inverso di contiene, vale a dire "è contenuto in"). Utilizzando una serie di OR normale "uguale" risultati in StackOverflowError come matrice / raccolta possono contenere alcune migliaia di voci, come la valutazione Drools operatore binario è ricorsivo.

Abbiamo un singolo fatto valore e una matrice di valori da abbinare. Il "codice" attuale assomiglia a questo:

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

per un gran numero di valori fissi (1,2,3, ...). Sto cercando qualcosa di più simile a "$ dati in (1,2,3, ...)".

È stato utile?

Soluzione

A volte è necessario (o è più leggibile a) mettere un po 'della valutazione in oggetto stesso. Quindi è possibile ridurre le dichiarazioni eval per sometihng come eval(!$f.isInRange(1, 200))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top