Котлін має дуже хороші функції перебору, як forEachабо repeat, але я не в змозі зробити breakі continueоператори працюють з ними (як місцевий , так і нелокальним):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
Мета - імітувати звичайні петлі з функціональним синтаксисом як можна ближче. Це було напевно можливо в деяких старих версіях Котліна, але я намагаюся відтворити синтаксис.
Проблема може бути помилкою з мітками (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/…