Котлін має дуже хороші функції перебору, як 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/…