JRuby中的双括号初始化

时间:2012-09-04 01:03:47

标签: java jruby double-brace-initialize

我正在尝试使用JRuby,我试图弄清楚如何使用Java double brace initialization。但是,语法的表现并不明显。

为了简化这个例子,下面的Java代码将创建一个包含元素的列表:

List<String> foo = new ArrayList<String>() {{
  add("bar");
}};


这在JRuby中是否可行,如果是,如何

ArrayList.new {{}}没有意义并导致错误:odd number list for Hash.puts ArrayList.new({{}})

2 个答案:

答案 0 :(得分:2)

我认为在JRuby中没有办法进行双花括号初始化。但是对于像ArrayList Initialization这样的东西,JRuby提供了以下示例中的快捷方式。

请查看https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby了解详情。

>> a = ArrayList.new [:a, :b, "c", "d"]
#<Java::JavaUtil::ArrayList:0x65a953>
>> a[0]
:a
>> a[1]
:b
>> a[2]
"c"
>> a[3]
"d"
>> a[4]
nil

答案 1 :(得分:1)

虽然不是这个问题的直接答案,但我添加了这个,因为这是一种方便的方法,让一些逻辑确定每个元素将是什么。这样就完成了将Ruby数组传递给ArrayList的构造函数。

ArrayList.new Array(10) {|i| i*i}

感谢Mark Thomas帮我思考。 :)