在Groovy中等效的MVEL.eval(表达式,Map <string,object> args,Class <t> toType)

时间:2016-01-07 20:44:52

标签: groovy mvel

我目前在我的代码中使用MVEL作为表达式语言,作为简单规则引擎的基础。由于缺乏支持以及相对默默无闻,我们正在考虑将Groovy作为表达语言。

我使用MVEL.eval(表达式,Map args,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);
}

}

但是,根据我从阅读文档以及here的理解,shell的Bindings是共享的,因为我将多次为不同的表达式和参数调用evaluateRule(),这会导致错误,因为较旧的绑定可以保留。

评估规则后是否有正确的方法来删除绑定?

0 个答案:

没有答案