Junior — Middle
Lze provést návrat z funkce mimo aktuálního kontextu uvnitř funkce deklarované jako crossinline v Kotlinu?
sobes.tech AI
Odpověď od AI
V Kotlinu funkce deklarovaná s modifikátorem crossinline zakazuje provádění nekontrolovaných návratů (non-local return) z lambda, kterou přijímá. To znamená, že nelze z lambda provést return pro opuštění vnější funkce, ve které je lambda volána.
Příklad:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // zde není povolen non-local return
}
runnable.run()
}
fun bar() {
foo {
// return // chyba kompilace, non-local return není povolen
println("Provádění lambda")
}
println("Pokračování funkce bar")
}
Proto není možné vrátit z funkce mimo aktuální kontext uvnitř crossinline lambda. Toto omezení bylo zavedeno pro bezpečnost a předvídatelnost kódu, zejména při použití lambda v asynchronních nebo odložených voláních.