在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}}。但是如何?
答案 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)