Junior — Middle
Lehetséges-e visszatérni egy függvényből a jelenlegi kontextuson kívül egy crossinline-ként deklarált Kotlin-függvényben?
sobes.tech MI
Válasz az MI-től
Kotlinban egy crossinline módosítóval deklarált függvény megtiltja a nem kontrollált visszatérések (non-local return) végrehajtását a benne elfogadott lambda-ból. Ez azt jelenti, hogy nem lehet return-t használni a lambda-ból, hogy kilépjünk a külső függvényből, amelyben ez a lambda hívásra kerül.
Példa:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // itt nem használható non-local return
}
runnable.run()
}
fun bar() {
foo {
// return // fordítási hiba, nem megengedett non-local return
println("Lambda végrehajtása")
}
println("A bar függvény folytatása")
}
Ezért nem lehetséges a visszatérés a függvényből a jelenlegi kontextuson kívül a crossinline lambda belsejében. Ezt a korlátozást a kód biztonsága és kiszámíthatósága érdekében vezették be, különösen akkor, amikor lambdákat aszinkron vagy késleltetett hívásokban használnak.