В последнее время я немного поиграл с Groovy и был удивлен, увидев, что он не поддерживает нелокальные возвраты изнутри замыкания. Я был весьма удивлен этим, потому что всегда ожидал, что это будет нормальным случаем со времен разработки Smalltalk. Лямбды JDK8 также не поддерживают нелокальные возвраты, как я понял к своему отчаянию. К счастью, у Scala есть.
Вопрос. Являются ли нелокальные возвраты изнутри замыкания обязательным условием для того, чтобы реализация замыкания была "полноценной"? Или я просто привык к этому из Smalltalk, но это не так.
Иллюстрация кода
def list = list(1, 2, 3)
def value = list.forEach { each ->
println(each)
if(true)
return each
return 5
}
println(value)
Я ожидаю, что он напечатает «11», а не «1235». По крайней мере, он не должен компилироваться, если будет печатать «1235».