Котлин имеет очень хорошие функции перебора, как forEach
или repeat
, но я не в состоянии сделать break
и continue
операторы работают с ними (как местный , так и нелокальным):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
Цель состоит в том, чтобы имитировать обычные циклы с функциональным синтаксисом как можно ближе. Это определенно было возможно в некоторых старых версиях Kotlin, но мне сложно воспроизвести синтаксис.
Проблема может заключаться в ошибке с этикетками (M12), но я думаю, что первый пример все равно должен работать.
Мне кажется, что я где-то читал про специальный трюк / аннотацию, но не нашел ни одной ссылки на эту тему. Может выглядеть так:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
break
и continue
для них, или ищете альтернативные ответы, которые делают то же самое. Кажется, что первое имеет место, потому что вы отвергли второе.
continue@label
иbreak@label
функций), см связанный с этим вопрос: stackoverflow.com/questions/34642868/...