Groovy GString变量双替换

时间:2014-07-22 10:52:06

标签: java templates groovy gstring

我有一个Groovy脚本。在Java中通过Binding我提供:

binding.put( 'a','Hello')

我通过GroovyShell运行脚本,我这样做:

print "${a}"

将打印

Hello

我需要print "${a}"其中a可以是调用其他方法的任何文本。 只需打印一个名称在运行时确定的变量。这怎么可能?

另一个澄清的例子:

binding.put( 'm','n')
binding.put( 'n','p')
打印????输出应该是'p',其中'm'在脚本中已知,但不是'n'

1 个答案:

答案 0 :(得分:1)

这样的事情会起作用:

// Java code...

Binding binding = new Binding();
binding.setVariable("m", "n");
binding.setVariable("n", "result");

// here the script is hardcoded in this Java source
// file but could be read from anywhere...
String groovyScript = "evaluate \"println(${m})\"";

GroovyShell shell = new GroovyShell(binding);

// this will println "result"
shell.evaluate(groovyScript);

我希望有所帮助。