将ArrayList作为RubyArray传递给Ruby

时间:2014-06-08 00:58:24

标签: java jruby

在Ruby中,如果您执行类似

的操作
print ["Hello", 1, 2]

你得到像

这样的输出
  

[“你好”,1,2]


在Java中有一些ArrayList对象,list。它包含Object类型的对象。

我将此列表传递给我的Ruby代码。打印时,控制台会输出类似

的内容
<Java::JavaUtil::ArrayList:0x5ab077a7>

当然,这是正确的。

但是,我希望得到与上面相同的行为。如果list包含两个类型为Object的对象,那么当Ruby提示它时,我想得到

  

[对象:0x1234567,对象:0x21432423]

而不是列表本身的引用。

我怀疑在将list传递给Ruby之前我应该​​将RubyArray转换为{{1}}。但是如何?

1 个答案:

答案 0 :(得分:2)

如果查看org.jruby.RubyArray的API,您会找到newArray工厂方法:

java.util.ArrayList list = new java.util.ArrayList();
org.jruby.RubyArray array = org.jruby.RubyArray.newArray(runtime, list);

当然你需要引用org.jruby.Ruby runtime来自Java端(取决于你的使用场景)可以通过以下几种方式获得:

org.jruby.Ruby.getGlobalRuntime();
org.jruby.Ruby.getThreadLocalRuntime();

还要注意,有一个运行时实例,有几个“帮助”工厂方法可以在Java中创建ruby对象,例如org.jruby.Ruby.getGlobalRuntime().newArray(list)