为简单起见,我们设代码如下:
def testMethod(String txt) {
return txt;
}
public String evaluate(String expression) {
//String result = "${testMethod('asdasdasd')}";
String result = "${expression}";
return result;
}
我需要传递给方法"evaluate"的表达式值来执行。
如果调用
// everything works perfectly well,
String result = "${testMethod('samplestring')}";
如果调用
// (when expression = testMethod) - everything works perfectly well,
String result = "${expression}"("samplestring");
如果调用
// (when expression = testMethod('samplestring')) - it's not working.
// I see testMethod('samplestring') as the result, but I need it to be evaluated.
String result = "${expression}"
我该怎么做呢?谢谢。
应该也可以;
Eval.me( "${expression}" )
编辑
如前所述,这不能正常工作,您需要传入包含Eval.x
方法的脚本,如下所示:
def testMethod(String txt) {
txt
}
public String evaluate(String expression) {
String result = Eval.x( this, "x.${expression}" )
result
}
println evaluate( "testMethod('samplestring')" )
打印samplestring
您可以为此目的使用GroovyShell
类,但是您需要定义一个Binding AFAIK。这在Groovy控制台中工作:
def testMethod(txt) {
"$txt!";
}
def evaluate(String expression) {
def binding = new Binding(['testMethod': testMethod])
new GroovyShell(binding).evaluate(expression)
}
evaluate('testMethod("Hello World")');