有两件事值得一提:
如果要计算groovy脚本,可能需要使用
new ScriptEngineManager().getEngineByExtension("groovy");
脚本传递给
engine.eval()
方法必须是有效的Groovy代码。传递给eval方法的脚本代码不是有效的groovy代码-您希望插入字符串,但没有将其放入双引号中。
请考虑以下示例:
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("groovy");
ScriptContext context = engine.getContext();
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x","Guest");
Object result = engine.eval("\"Hello, ${x}\"", context);
System.out.println(result);
输出:
Hello, Guest
或者,您可以传递一个groovy脚本来打印插入的脚本。在这种情况下,代码可能如下所示:
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("groovy");
ScriptContext context = engine.getContext();
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x","Guest");
engine.eval("println \"Hello, ${x}\"", context);
它产生相同的输出,但不指定
Hello, Guest
一个变量。