Нет, вы не можете выйти из замыкания в Groovy без исключения.Кроме того, вы не должны использовать исключения для потока управления.
Если вы хотите выйти из замыкания, вам, вероятно, следует сначала подумать, почему вы хотите это сделать, а не как это сделать.Первым, что следует рассмотреть, может быть замена рассматриваемого замыкания одной из (концептуальных) функций более высокого порядка Groovy.Следующий пример:
for ( i in 1..10) { if (i < 5) println i; else return}
становится
(1..10).each{if (it < 5) println it}
становится
(1..10).findAll{it < 5}.each{println it}
, что также помогает ясности.Он намного лучше определяет цель вашего кода.
Потенциальный недостаток в показанных примерах состоит в том, что в первом примере итерация останавливается только рано.Если у вас есть соображения производительности, вы можете остановить это прямо сейчас.
Однако для большинства случаев использования, включающих итерации, вы обычно можете прибегнуть к одному из методов Groovy: поиск, grep, collect, inject и т. Д.,Они обычно принимают некоторую «конфигурацию», а затем «знают», как выполнить итерацию за вас, чтобы вы могли избежать императивного зацикливания, где это возможно.