context
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.2Samples
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, 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.2Samples
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
}