从Java访问JRuby脚本顶级环境的变量

j ruby 1.7.23(1.9.3p551)2015-11-24 Java HotSpot(TM)64位服务器虚拟机上的f496dd5 1.7.0_79-b15 jit [Windows 7-amd64]

我在我的脚本容器中运行一个scriptlet,如下所示:

(RubyObject) ro = (RubyObject)container.runScriptlet(org.jruby.embed.PathType.RELATIVE,"example.rb");

其中容器类型为ScriptingContainer. “局部变量行为”设置为“transient”.

文件example.rb包含以下行:

foo='xxx'
$bar='yyy'
'zzz'

我可以从Java端检索值’zzz’,因为它是从runScriptlet显式返回的.我也可以检索$bar的值

container.get("$bar")

有没有办法检索foo的价值? container.get(“foo”)返回空指针.

我也尝试将局部变量行为更改为“persistent”,但结果仍然相同.

解决方法

我想你已经使用了这个ScriptingContainer(LocalVariableBehavior.PERSISTENT),但是这个必要意味着你已经可以访问这个scriptContainer里面的大部分内容了.可能我们可以修改你的代码并尝试使用parse.请参阅 example 4.它可能会启发你.希望这可以帮助.

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...