Context receivers позволяли объявить требуемые контекстные объекты и использовать их как неявные ресиверы. В старом экспериментальном синтаксисе это выглядело так:
Что такое 'context receivers' и как они функционируют в Kotlin?
Context receivers позволяли объявить требуемые контекстные объекты и использовать их как неявные ресиверы. В старом экспериментальном синтаксисе это выглядело так:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Context receivers позволяли объявить требуемые контекстные объекты и использовать их как неявные ресиверы. В старом экспериментальном синтаксисе это выглядело так:
// Исторический синтаксис context receivers
context(Logger)
fun report(message: String) {
log(message)
}
При вызове нужный ресивер предоставляли, например, через with(logger) { report("Готово") }. Просто объявить локальную переменную типа Logger было недостаточно.
Новый механизм context parameters даёт зависимостям имена:
// Синтаксис context parameters в поддерживающей его версии Kotlin
context(logger: Logger)
fun report(message: String) {
logger.log(message)
}
Это помогает описывать контекст выполнения и зависимости без их повторения в обычных аргументах каждого вызова. Разрешение зависит от доступных значений подходящего типа; неоднозначность является ошибкой.
Context receivers не следует представлять как актуальный универсальный механизм всех версий Kotlin. Для проекта сверяют поддержку и параметры компилятора с его версией. Документация context parameters и миграции.