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 の初期化などについては、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 に答える