Посмотрите на этот пример:
fun f(block: suspend () -> Unit) {
println("with suspend")
}
fun f(block: () -> Unit) {
println("without suspend")
}
fun main() {
f(suspend {
})
// This call cause compilation error:
// Error:(16, 5) Kotlin: Overload resolution ambiguity:
// public fun f(block: () -> Unit): Unit defined in root package in file Main.kt
// public fun f(block: suspend () -> Unit): Unit defined in root package in file Main.kt
//
// f({
// })
// This call cause compilation error:
//
// Error:(25, 5) Kotlin: Overload resolution ambiguity:
// public fun f(block: () -> Unit): Unit defined in root package in file Main.kt
// public fun f(block: suspend () -> Unit): Unit defined in root package in file Main.kt
//
// f {
// }
}
Здесь объявлены две функции (одна с ключевым словом suspend
в лямбде и одна без).
Вопросы:
1) Как вызвать первую или вторую функцию? Как видите, я могу вызывать функцию с помощью suspend
, но не могу вызывать функцию без ключевого слова suspend
.
2) Можно переписать f(suspend {})
с помощью конечная лямбда ( т.е. использовать что-то вроде f suspend {}
)?