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