java ScriptEngine 在数组方法上失败

我在 Java ScriptEngine 中执行一组 JavaScript 方法时遇到问题。


我使用 JDK 8。


例子


@Test

public void arrayMethod() throws Exception {

    ScriptEngine engine;

    engine = new ScriptEngineManager().getEngineByName("JavaScript");

    String script = "function f1() { return [\"string2\",\"string3\"].some(item => o1==item); }";

    engine.eval(script);

    engine.put("o1", "string1");

    Boolean result =  (Boolean) (((Invocable) engine).invokeFunction("f1"));

    LOG.info(result.toString());

}

结果


java.lang.AssertionError:为 :1 生成字节码失败


at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(CompilationPhase.java:431)

at jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:624)

at jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:655)

我尝试使用其他方法(每种方法等)得到相同的结果。没有语法错误,但 java 脚本编译器无法创建代码。我的 ScriptEngine 版本没有包含数组的方法。它返回语法错误。如何在 ScriptEngine 中使用数组?


HUH函数
浏览 175回答 2
2回答

德玛西亚99

您正在使用 ES6 引入的箭头函数。JDK8 Nashorn 不支持 ES6,只支持 ES5.1。将您的箭头函数转换为标准函数,它将运行:String script = "function f1() { return [\"string2\",\"string3\"].some(function(item){return o1==item;})}";

红颜莎娜

我使用 JDK 8。对于您的脚本,您至少需要 JDK 9,因为有一个箭头函数,它仅从 Java 9 开始受支持。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java