1

我正在尝试 JRuby,并试图弄清楚如何使用 Java 的双括号初始化。但是,语法如何并不那么明显。

为了简单起见,下面的 Java 代码将创建一个包含元素的列表:

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


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

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

4

2 回答 2

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
于 2012-09-04T02:16:10.793 回答
1

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

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

感谢Mark Thomas帮助我思考。:)

于 2012-09-04T18:05:49.510 回答