MVEL.eval(выражение, Map<String, Object> args, Class<T> toType) эквивалент в Groovy

В настоящее время я использую MVEL как язык выражений в моем коде, как основу для простого механизма правил. Из-за отсутствия поддержки, а также относительной неясности мы думаем о переходе на Groovy в качестве языка выражений.

Я использую MVEL.eval(выражение, аргументы Map,Class toType) в качестве основного метода оценки, который допускает произвольные аргументы без необходимости какого-либо перевода или интерпретации.

Есть ли аналогичный метод для Groovy? В настоящее время я думал что-то вроде (Пожалуйста, не стесняйтесь поправлять меня, если я не прав)

Мои занятия

class GroovyRuleEvaluator implements RuleEvaluator {

private final GroovyShell shell;
private final Binding variableBinding;

public GroovyRuleEvaluator() {
 variableBinding = new Binding();
 shell = new GroovyShell(variableBinding);
}

@Override
public Object evaluateRule(String expression,Map<String,Object> args) {
 args.forEach((name,value) -> variableBinding.setProperty(name,value));
 return shell.evaluate(expression);
}

}

Однако из того, что я понял из чтения документации, а также здесь, привязки к оболочке являются общими, и, поскольку я буду вызывать valuRule() несколько раз для различных выражений и аргументов, это приведет к ошибкам, поскольку более старые привязки могут быть настойчивым.

Есть ли правильный способ удалить привязки после оценки правила?

0 ответов

Другие вопросы по тегам