Инициализация двойной скобки в JRuby
Я пробую JRuby, и я пытался понять, как использовать инициализацию двойной скобки Java. Тем не менее, не так очевидно, как будет выглядеть синтаксис.
Чтобы сохранить этот пример простым, приведенный ниже код Java создаст список, содержащий элемент:
List<String> foo = new ArrayList<String>() {{
add("bar");
}};
Возможно ли это в JRuby, и если да, то как?
ArrayList.new {{}}
не имеет смысла и приводит к ошибке: odd number list for Hash.puts ArrayList.new({{}})
,
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
Хотя это и не прямой ответ на вопрос, я добавляю это, потому что это удобный способ заставить некоторую логику определять, каким будет каждый элемент. Это делается передачей Ruby Array в конструктор ArrayList.
ArrayList.new Array(10) {|i| i*i}
Спасибо Mark Thomas за помощь в размышлениях.:)