Существует ли способ использовать анонимные блоки кода в 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" является антишаблоном также, таким образом, для этого кода я продолжаю работать, анонимные блоки кода были бы полезны.
В Groovy можно использовать анонимные блоки кода, но синтаксис неоднозначен между ними и их замыканиями. Если вы попытаетесь запустить это, вы получите следующую ошибку:
Неоднозначное выражение может быть либо закрывающим выражением без параметров , либо изолированным блоком открытого кода ; Решение: Добавьте явный список закрывающих параметров , например {it -> ...}, или принудительно обработать его как открытый блок, присвоив ему метку , например L: {...} в строке: 1, столбец: 1
Следуя предложению, вы можете использовать метку, и это позволит вам использовать анонимный блок кода. Переписывая свой Java-код в Groovy:
l: {
int i = 0
println i
}
int i = 10
println i
А как насчет:
({
int i = 0
println i
}).()
int i = 10
println i
У меня нет под рукой установки Groovy, но она должна работать.
В Groovy эти фигурные скобки составляют закрывающий литерал. Итак, ничего не поделаешь. Лично я бы подумал, что отказ от анонимных блоков для получения закрытия является очень выгодной сделкой.