Kotlin ma bardzo ładne funkcje iteracyjne, takie jak forEach
lub repeat
, ale nie jestem w stanie zmusić operatorów break
i do continue
pracy z nimi (zarówno lokalnymi, jak i nielokalnymi):
repeat(5) {
break
}
(1..5).forEach {
continue@forEach
}
Celem jest naśladowanie zwykłych pętli przy możliwie najbliższej składni funkcjonalnej. Z pewnością było to możliwe w niektórych starszych wersjach Kotlina, ale mam problem z odtworzeniem składni.
Problemem może być błąd z etykietami (M12), ale myślę, że pierwszy przykład powinien i tak działać.
Wydaje mi się, że czytałem gdzieś o specjalnej sztuczce / adnotacji, ale nie mogłem znaleźć żadnego odniesienia na ten temat. Może wyglądać następująco:
public inline fun repeat(times: Int, @loop body: (Int) -> Unit) {
for (index in 0..times - 1) {
body(index)
}
}
break
i continue
dla pętli funkcjonalnych, czy też szukasz alternatywnych odpowiedzi, które robią dokładnie to samo. Wydaje się, że tak jest w pierwszym przypadku, ponieważ odrzuciłeś to drugie.
continue@label
ibreak@label
), zobacz powiązane pytanie: stackoverflow.com/questions/34642868/…