Анонимные блоки кода в Groovy

Существует ли способ использовать анонимные блоки кода в Groovy? Например, я пытаюсь перевести следующий код Java в Groovy:

{
  int i = 0;
  System.out.println(i);
}
int i = 10;
System.out.println(i);

Самый близкий перевод, который я могу придумать, следующий:

boolean groovyIsLame = true
if (groovyIsLame) {
  int i = 0
  println i
}
int i = 10
println i

Я знаю, что анонимные блоки кода часто являются видом антишаблона. Но наличие переменных с именами как "inputStream0" и "inputStream1" является антишаблоном также, таким образом, для этого кода я продолжаю работать, анонимные блоки кода были бы полезны.

12
задан piepera 19 April 2010 в 20:52
поделиться

3 ответа

В Groovy можно использовать анонимные блоки кода, но синтаксис неоднозначен между ними и их замыканиями. Если вы попытаетесь запустить это, вы получите следующую ошибку:

Неоднозначное выражение может быть либо закрывающим выражением без параметров , либо изолированным блоком открытого кода ; Решение: Добавьте явный список закрывающих параметров , например {it -> ...}, или принудительно обработать его как открытый блок, присвоив ему метку , например L: {...} в строке: 1, столбец: 1

Следуя предложению, вы можете использовать метку, и это позволит вам использовать анонимный блок кода. Переписывая свой Java-код в Groovy:

l: {
  int i = 0
  println i
}
int i = 10
println i
16
ответ дан 2 December 2019 в 06:08
поделиться

А как насчет:

({
 int i = 0
 println i
}).()

int i = 10
println i

У меня нет под рукой установки Groovy, но она должна работать.

2
ответ дан 2 December 2019 в 06:08
поделиться

В Groovy эти фигурные скобки составляют закрывающий литерал. Итак, ничего не поделаешь. Лично я бы подумал, что отказ от анонимных блоков для получения закрытия является очень выгодной сделкой.

1
ответ дан 2 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: