Java脚本引擎中的字符串表达式插值支持

时间:2019-01-14 21:51:44

标签: java groovy nashorn java-scripting-engine

我将groovy / nashorn用作Java引擎,但无法插值字符串。

if (let foo = bar)

但是我正在获取javax.script.ScriptException。 是否支持斯特灵插值? 谢谢

1 个答案:

答案 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分配给变量。