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() несколько раз для различных выражений и аргументов, это приведет к ошибкам, поскольку более старые привязки могут быть настойчивым.
Есть ли правильный способ удалить привязки после оценки правила?