Пакетное логическое короткое замыкание - PullRequest
0 голосов
/ 07 ноября 2018

У нас есть сценарий использования для оценки логических выражений. Как мы это делаем сегодня -

JexlContext jc = new MapContext();
Foo foo = new Foo();
List<Variable> variableList = new ArrayList();
variable.add(new Variable());
variable.add(new Variable());
variable.add(new Variable());

jc.set("foo", foo);

for(Variable variable : variableList){
    jc.set("variable", variable);

    JexlExpression e = jexl.createExpression("(foo.getBool1(variable) && foo.getBool2(variable)) || foo.getBool3(variable)");
    Object o = e.evaluate(jc);
}

Это допускает короткое замыкание, как будто foo.getBool2 (переменная) возвращает true, foo.getBool2 (переменная)) вычислять не нужно.

Однако теперь определено, что функции getBool1, getBool2, getBool3 работают Лучше, если они передают пакет переменных, а не одну за раз.

Подпись меняется с от логического getBool1 (переменная v) до логического getBool1 (список vList).

Есть ли способ добиться короткого замыкания логического выражения с помощью пакета переменных, используя JEXl? Должен ли я перейти к выполнению операций над множествами? Любые предложения приветствуются.

...