// 源码
val add: (Int, Int) -> Int = { a, b -> a + b }
// 编译后等价于
val add = object : Function2<Int, Int, Int> {
override fun invoke(p1: Int, p2: Int): Int {
return p1 + p2
}
}
7. 挂起 Lambda 的完整编译
kotlin复制代码
// 源码
val suspendAdd: suspend (Int, Int) -> Int = { a, b ->
delay(100)
a + b
}
// 编译后类似
class SuspendLambda$1 : SuspendLambda(2), Function3<Int, Int, Continuation<Int>, Any?> {
override fun invoke(p1: Int, p2: Int, continuation: Continuation<Int>): Any? {
return create(p1, p2, continuation).invokeSuspend(Result.success(Unit))
}
override fun invokeSuspend(result: Result<Any?>): Any? {
// 状态机逻辑
when (label) {
0 -> {
label = 1
return delay(100, this)
}
1 -> {
return arg1 + arg2 // 捕获的参数
}
}
}
}