我有一个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)