Java SE 6新特性: 对脚本语言的支持 - 编程入门网
这些属性;对应的,引擎级别的 Bindings 里的属性则是“局部变量”,它们只对同一个引擎实例可见,从而能为不同的引擎设置独特的环境,通过同一个脚本引擎运行的脚本运行时能共享这些属性。
ScriptContext 接口定义了下面这些函数来存取数据: 表 3. ScriptContext 存取属性函数
ScriptEngineManager 拥有一个全局性的 Bindings 实例,在通过 ScriptEngineFactory 实例创建 ScriptEngine 后,它把自己的这个 Bindings 传递给所有它创建的 ScriptEngine 实例,作为 GLOBAL_SCOPE。同时,每一个 ScriptEngine 实例都对应一个 ScriptContext 实例,这个 ScriptContext 除了从 ScriptEngineManager 那获得的 GLOBAL_SCOPE,自己也维护一个 ENGINE_SCOPE 的 Bindings 实例,所有通过这个脚本引擎运行的脚本,都能存取其中的属性。除了 ScriptContext 可以设置属性,改变内部的 Bindings,Java 脚本 API 为 ScriptEngineManager 和 ScriptEngine 也提供了类似的设置属性和 Bindings 的 API。 图 3. Bindings 在 Java 脚本 API 中的分布 Java SE 6新特性: 对脚本语言的支持(5)时间:2011-02-15 IBM 邱小侠从 图 3 中可以看到,共有三个级别的地方可以存取属性,分别是 ScriptEngineManager 中的 Bindings,ScriptEngine 实例对应的 ScriptContext 中含有的 Bindings,以及调用 eval 函数时传入的 Bingdings。离函数调用越近,其作用域越小,优先级越高,相当于编程语言中的变量的可见域,即 Object getAttribute(String name) 中提到的优先级。从 清单 3 这个例子中可以看出各个属性的存取优先级: 清单 3. 上下文属性的作用域
JavaScript 脚本 println(greeting) 在这个程序中被重复调用了三次,由于三次调用的环境不一样,导致输出也不一样,greeting 变量每一次都被优先级更高的也就是距离函数调用越近的值覆盖。从这个例子同时也演示了如何使用 ScriptContext 和 Bi |
||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |