相关疑难解决方法(0)

捕获Nashorn的全局变量

我有一个Java 7程序,它加载了数千个对象(组件),每个对象都有许多参数(存储在a中Map),并在这些对象上执行各种Rhino脚本来计算其他派生参数,这些参数存储在对象中Map.在运行每个脚本之前,Scope会创建一个对象的映射支持的对象,该对象在脚本的持续时间内用作JavaScript的作用域.

举一个简单的例子,下面创建一个HashMapa = 10和b = 20,并执行脚本c = a + b,这会导致c = 30.0存储在地图中.虽然脚本看起来像是在创建一个全局变量c,但该Scope对象会捕获它并将其存储在地图中; 使用不同Scope对象执行的另一个脚本将不会看到此变量:

public class Rhino {

    public static void main(String[] args) throws ScriptException {
        Context cx = Context.enter();
        Scriptable root_scope = cx.initStandardObjects();

        Map<String, Object> map = new HashMap<>();
        map.put("a", 10);
        map.put("b", 20);

        Scope scope = new Scope(root_scope, map);
        cx.evaluateString(scope, "c = a + b", "<expr>", 0, null);
        System.out.println(map); // --> …
Run Code Online (Sandbox Code Playgroud)

javascript java rhino nashorn

7
推荐指数
1
解决办法
2601
查看次数

标签 统计

java ×1

javascript ×1

nashorn ×1

rhino ×1