I like anonymous functions, they have different semantics than lambdas while still being easily assignable to a variable for callbacks etc.
But any reason they do not work with the keyword suspend?
2 Likes
I can confirm that anonymous functions can’t be suspended. The following expression failed:
@Suppress("UNCHECKED_CAST")
example.runLambda((fun(): String = "world") as suspend () -> String)
Here is an example on how to declare use of suspendible lambda, implementation of suspendible lambda and use of suspendible lambda:
package example
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlin.coroutines.EmptyCoroutineContext
interface Example {
// Declare method that takes a suspendable lambda lambda
fun runLambda(hello: suspend () -> String)
}
class ExampleImpl : Example {
private val scope = CoroutineScope(EmptyCoroutineContext)
// Implement the method
override fun runLambda(hello: suspend () -> String) {
scope.launch { println("Hello, ${hello()}!") }
}
}
fun main(args: Array<String>) {
val example = ExampleImpl()
// Then use the lambda
example.runLambda {
"world"
}
}
2 Likes
absolutely amazing reply brother, I am just a bit confused by the design choice to allow ordinal functions and lambda functions to be suspended but not anonymous functions in particular.
3 Likes
Hard to know why
1 Like