Junior — Middle
Este posibil să efectuați o returnare dintr-o funcție în afara contextului actual într-o funcție declarată ca crossinline în Kotlin?
sobes.tech AI
Răspuns de la AI
În Kotlin, o funcție declarată cu modificatorul crossinline interzice executarea returnărilor necontrolate (non-local return) din lambda pe care o acceptă. Aceasta înseamnă că nu se poate face un return din lambda pentru a ieși din funcția externă în care este apelată această lambda.
Exemplu:
inline fun foo(crossinline block: () -> Unit) {
val runnable = Runnable {
block() // nu se poate folosi un non-local return aici
}
runnable.run()
}
fun bar() {
foo {
// return // eroare de compilare, non-local return nu este permis
println("Executarea lambda")
}
println("Continuarea funcției bar")
}
Prin urmare, nu este posibil să se facă un return din funcția în afara contextului actual în interiorul unei lambda crossinline. Această restricție a fost introdusă pentru siguranță și previzibilitatea codului, mai ales atunci când se folosesc lambdas în apeluri asincrone sau întârziate.