gpt4 book ai didi

javascript - 如何调用 Nashorn CompiledScript 中的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:32 28 4
gpt4 key购买 nike

我有以下有效的代码:

ScriptEngine jsEngine = ScriptEngineManager.new().getEngineByName("nashorn");
jsEngine.eval("some script");

jsEngine.invokeMethod(jsEngine.eval("foo"), "bar");

但我想使用预编译的脚本,这样我就不必在每次需要运行时都评估脚本,所以我正在尝试;

ScriptEngine jsEngine = ScriptEngineManager.new().getEngineByName("nashorn");
CompiledScript compiledJS = jsEngine.compile("some script");

但是我不确定如何处理 CompiledScript,我该如何调用方法?它显然没有实现 eval() 以外的任何东西:https://docs.oracle.com/javase/8/docs/api/javax/script/CompiledScript.html

最佳答案

你调用了这个方法?

这里有几个例子:http://www.programcreek.com/java-api-examples/index.php?api=javax.script.CompiledScript


例子:

import java.util.*;
import javax.script.*;

public class TestBindings {
public static void main(String args[]) throws Exception {
String script = "function doSomething() {var d = date}";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
Compilable compilingEngine = (Compilable) engine;
CompiledScript cscript = compilingEngine.compile(script);

//Bindings bindings = cscript.getEngine().createBindings();
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
for(Map.Entry me : bindings.entrySet()) {
System.out.printf("%s: %s\n",me.getKey(),String.valueOf(me.getValue()));
}
bindings.put("date", new Date());
//cscript.eval();
cscript.eval(bindings);

Invocable invocable = (Invocable) cscript.getEngine();
invocable.invokeFunction("doSomething");
}
}

关于javascript - 如何调用 Nashorn CompiledScript 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251807/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com