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

java脚本引擎中的字符串表达式插值支持,java,groovy,nashorn,java-scripting-engine,Java,Groovy,Nashorn,Java Scripting Engine,我使用groovy/nashorn作为java引擎,但不能插入字符串 jdk.nashorn.api.scripting.NashornScriptEngine scriptEngine =(NashornScriptEngine) factory.getEngineByName("nashorn"); ScriptContext context = scriptEngine.getContext(); Bindings bindings = context.getBindings(Scrip

我使用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。 是否支持字符串插值?
谢谢

有两件事值得一提:

  • 如果要评估Groovy脚本,可能需要使用

    new ScriptEngineManager().getEngineByExtension("groovy");
    
  • 传递给
    engine.eval()
    方法的脚本必须是有效的Groovy代码。传递给eval方法的脚本代码不是有效的Groovy代码-您希望插入字符串,但没有将其放在双引号内

考虑以下示例:

ScriptEngine=newscriptenginemanager().getEngineeByExtension(“groovy”);
ScriptContext=engine.getContext();
Bindings Bindings=context.getBindings(ScriptContext.ENGINE_作用域);
绑定。放置(“x”、“来宾”);
对象结果=engine.eval(“\”你好,${x}\”,上下文);
系统输出打印项次(结果);
输出:

你好,客人
或者,您可以传递一个打印插值脚本的Groovy脚本。在这种情况下,代码可能如下所示:

ScriptEngine=newscriptenginemanager().getEngineeByExtension(“groovy”);
ScriptContext=engine.getContext();
Bindings Bindings=context.getBindings(ScriptContext.ENGINE_作用域);
绑定。放置(“x”、“来宾”);
eval(“println\”你好,${x}\”,上下文);
它生成相同的输出,但不将
Hello,Guest
分配给变量