gpt4 book ai didi

java - Rhino 将两个已编译的脚本合并为一个

转载 作者:太空狗 更新时间:2023-10-29 14:14:25 24 4
gpt4 key购买 nike

我在 Java 中使用 Rhino 在 Android 上执行 JavaScript。为了执行 javascript,我使用 Context#compileString() 创建了一个 Script 对象然后在脚本对象上调用 exec。

我调用的执行js由两部分组成:一是常量,一是动态。是否可以只编译常量部分一次以提高性能?我在合并两个脚本对象时找不到任何东西,所以这似乎是不可能的。但也许我只是忽略了一些事情,或者有另一种方法可以解决这个问题?

最佳答案

我相信你想使用 ScriptContext , 然后你从你的 ScriptEngine 得到它然后 eval()再次。请注意,您可以重用它(只要您不修改静态部分),请参阅下面的已编译

public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine rhino = manager.getEngineByName("JavaScript");
try {
rhino.eval("function f(){return 1+1;} "
+ "function g(){return f()*f();}");
ScriptContext compiled = rhino.getContext();
String f = rhino.eval("f()", compiled).toString();
String g = rhino.eval("g()", compiled).toString();
System.out.println("f() = " + f);
System.out.println("g() = " + g);
} catch (ScriptException e) {
e.printStackTrace();
}
}

输出是

f() = 2.0
g() = 4.0

编辑

请注意,我也可以这样做 -

rhino.eval("var i = 0; function f(){return ++i;} "
+ "function g(){return f()*f();}");
ScriptContext compiled = rhino.getContext();
String f = rhino.eval("f()", compiled).toString();
System.out.println("f() = " + f);
f = rhino.eval("f()", compiled).toString();
String g = rhino.eval("g()", compiled).toString();
System.out.println("f() = " + f);
System.out.println("g() = " + g);

输出(可能出乎意料的)12,

f() = 1.0
f() = 2.0
g() = 12.0

关于java - Rhino 将两个已编译的脚本合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914304/

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