Spec-Zone.ru › Kotlin 2

contextOf

kotlin-stdlib/kotlin/contextOf

Начиная с Kotlin: 2.2

context(context: A)
inline fun <A> contextOf(): A

Получает контекстный аргумент, получатель расширения или получатель-диспетчеризацию в области видимости, соответствующий указанному типу. Компилятор гарантирует, что существует как минимум одно такое значение. Если найдено несколько значений, приоритет отдается более вложенным областям видимости; в противном случае компилятор выдает ошибку неоднозначности.

При вызове contextOf всегда необходимо указывать аргумент типа, даже если тип можно вывести из контекста.

Примеры


fun main() { 
   //sampleStart 
   abstract class Logger { abstract fun log(message: String) }
class ConsoleLogger : Logger() { override fun log(message: String) = println(message) }

fun <A> withConsoleLogger(block: context(Logger) () -> A): A =
    context(ConsoleLogger()) { block() }

withConsoleLogger {
    contextOf<Logger>().log("start")
    println("work")
    contextOf<Logger>().log("end")
} 
   //sampleEnd
}

fun main() { 
   //sampleStart 
   abstract class Logger { abstract fun log(message: String) }
class ConsoleLogger : Logger() { override fun log(message: String) = println(message) }

fun <A> withConsoleLogger(block: Logger.() -> A): A =
    with(ConsoleLogger()) { block() }

withConsoleLogger {
    contextOf<Logger>().log("start")
    println("work")
    contextOf<Logger>().log("end")
} 
   //sampleEnd
}

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/context-of.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API