Ответ
Нет, non-local return (возврат из внешней функции) невозможен в crossinline функциях.
Причина: crossinline запрещает нелокальные возвраты, так как такие функции могут выполняться вне контекста вызывающей функции (например, в другом потоке или после завершения родительской функции).
Пример:
inline fun runCrossinline(crossinline block: () -> Unit) {
block()
}
fun test() {
runCrossinline {
return // Ошибка компиляции: "Can't inline 'return' here"
}
}
Для локальных возвратов используйте return@label:
runCrossinline {
return@runCrossinline // Локальный возврат
}