我使用Java 8 Nashorn执行特定的先前同意的方法。我可以调用具体方法没问题。但有一件事让我感到困惑的是,当我加载脚本时,它也会执行它。
例如,如果file.js包含print(“hello world!”),则scriptEngine.eval(新的FileReader(“./ file.js”)将执行并打印hello world。我必须先执行此操作才能执行此操作调用我想要的特定方法。
有没有办法在不执行脚本的情况下eval()/加载脚本?
由于
答案 0 :(得分:2)
结果你可以通过将引擎转换为Compilable然后调用编译函数来完成此操作。
final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
final Compilable compilable = (Compilable) engine;
final Invocable invocable = (Invocable) engine;
final String statement = "function fetch(values) { return values['first_name'] + ' ' + values['last_name']; };";
final CompiledScript compiled = compilable.compile(statement);
这实现了我想要的而不需要eval()它