Junior — Middle
Je možné vykonať návrat z funkcie mimo aktuálneho kontextu vo vnútri funkcie, ktorá je deklarovaná ako crossinline v Kotlin?
sobes.tech AI
Odpoveď od AI
V Kotlinu, funkcia deklarovaná s modifikátorom crossinline zakazuje vykonávanie nekontrolovaných návratov (non-local return) z lambda, ktorú prijíma. To znamená, že z lambda nie je možné použiť return na opustenie vonkajšej funkcie, v ktorej je lambda volaná.
Príklad:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // tu nie je povolený non-local return
}
runnable.run()
}
fun bar() {
foo {
// return // chyba kompilácie, non-local return nie je povolený
println("Vykonávanie lambda")
}
println("Pokračovanie funkcie bar")
}
Preto nie je možné vrátiť z funkcie mimo aktuálneho kontextu vnútri crossinline lambda. Toto obmedzenie bolo zavedené pre bezpečnosť a predvídateľnosť kódu, najmä pri použití lambda v asynchrónnych alebo odložených volaniach.