context

inline fun <T, R> context(with: T, block: (T) -> R): R(source)

Runs the specified block with the given value in context scope.

As opposed to with, context only makes the value available for context parameter resolution, but not as implicit receiver.

Since Kotlin

2.2

Samples


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

context(logger: Logger) fun doSomething() {
    logger.log("hello")
    // do something
    logger.log("bye")
}

fun example() {
    context(ConsoleLogger()) {
        doSomething()
    }
} 
   //sampleEnd
}

inline fun <A, B, Result> context(a: A, b: B, block: (A, B) -> Result): Result(source)
inline fun <A, B, C, Result> context(a: A, b: B, c: C, block: (A, B, C) -> Result): Result(source)
inline fun <A, B, C, D, Result> context(a: A, b: B, c: C, d: D, block: (A, B, C, D) -> Result): Result(source)
inline fun <A, B, C, D, E, Result> context(a: A, b: B, c: C, d: D, e: E, block: (A, B, C, D, E) -> Result): Result(source)
inline fun <A, B, C, D, E, F, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, block: (A, B, C, D, E, F) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, block: (A, B, C, D, E, F, G) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, block: (A, B, C, D, E, F, G, H) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, block: (A, B, C, D, E, F, G, H, I) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, block: (A, B, C, D, E, F, G, H, I, J) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, block: (A, B, C, D, E, F, G, H, I, J, K) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, block: (A, B, C, D, E, F, G, H, I, J, K, L) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, block: (A, B, C, D, E, F, G, H, I, J, K, L, M) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T, u: U, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U) -> Result): Result(source)
inline fun <A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, Result> context(a: A, b: B, c: C, d: D, e: E, f: F, g: G, h: H, i: I, j: J, k: K, l: L, m: M, n: N, o: O, p: P, q: Q, r: R, s: S, t: T, u: U, v: V, block: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V) -> Result): Result(source)

Runs the specified block with the given values in context scope.

As opposed to with, context only makes the values available for context parameter resolution, but not as implicit receivers.

Since Kotlin

2.2

Samples


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

context(logger: Logger) fun doSomething() {
    logger.log("hello")
    // do something
    logger.log("bye")
}

fun example() {
    context(ConsoleLogger()) {
        doSomething()
    }
} 
   //sampleEnd
}