2

我正在使用 groovy/nashorn 作为 java 引擎,但无法插入字符串。

jdk.nashorn.api.scripting.NashornScriptEngine  scriptEngine =(NashornScriptEngine) factory.getEngineByName("nashorn");
ScriptContext context = scriptEngine.getContext();
Bindings bindings = context.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x","Guest");
engine.eval("Hello, ${x}",context);

但我得到了 javax.script.ScriptException。是否支持字符串插值?谢谢

4

1 回答 1

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给变量。

于 2019-01-14T22:20:09.697 回答