crossinlineМодификатор crossinline применяется к параметрам-лямбдам inline функций, чтобы явно запретить нелокальные возвраты внутри этой лямбды.
В Kotlin лямбды, передаваемые в inline функции, могут использовать return для выхода из функции-контейнера, а не только из самой лямбды. Это называется нелокальным возвратом. Например:
inline fun run(block: () -> Unit) {
block() // вызывающий может использовать 'return' для выхода из своей функции
}
crossinline необходимИспользуй crossinline, когда лямбда выполняется в контексте, где нелокальный возврат не допускается, например:
inline fun execute(crossinline block: () -> Unit) {
val runnable = Runnable { block() } // нелокальный возврат здесь не допускается
runnable.run()
}
Без crossinline компилятор выдал бы ошибку, потому что нелокальный возврат внутри Runnable был бы неоднозначным и небезопасным.
crossinline сохраняет преимущество по производительности от инлайнирования, ограничивая то, как лямбда может делать возвратreturn внутри лямбды выходит только из самой лямбды, а не из внешней функцииМодификатор crossinline позволяет использовать non-local returns внутри lambda-параметров, при этом запрещая им выходить из окружающей функции.
Новый — ещё не проверен сообществом
Вы