Junior — Middle
Може ли се извршити повратак из функције изван тренутног контекста унутар функције проглашене као crossinline у Kotlin-у?
sobes.tech АИ
Одговор од АИ
U Kotlinu, funkcija deklarisana sa modifikatorom crossinline zabranjuje izvršenje nekontrolisanih povrataka (non-local return) iz lambda izraza koji prihvata. To znači da se return iz lambda izraza ne može koristiti za izlazak iz spoljašnje funkcije u kojoj je lambda pozvana.
Primer:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // ovde nije dozvoljen non-local return
}
runnable.run()
}
fun bar() {
foo {
// return // greška pri kompilaciji, non-local return nije dozvoljen
println("Izvršavanje lambda")
}
println("Nastavak funkcije bar")
}
Dakle, povratak iz funkcije van trenutnog konteksta unutar crossinline lambda izraza je nemoguć. Ovo ograničenje je uvedeno radi sigurnosti i predvidivosti koda, posebno pri korišćenju lambda izraza u asinhronim ili odloženim pozivima.