我将groovy / nashorn用作Java引擎,但无法插值字符串。
if (let foo = bar)
但是我正在获取javax.script.ScriptException。 是否支持斯特灵插值? 谢谢
答案 0 :(得分:0)
有两件事值得一提:
如果要评估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
分配给变量。