Kotlin关于内联函数的文档说
请注意,一些内联函数可能会调用作为参数传递给它们的lambda,而不是直接从函数体,而是从另一个执行上下文,如本地对象或嵌套函数。在这种情况下,lambdas中也不允许使用非本地控制流。为了表明这一点,lambda参数需要用crossline修饰符标记:
什么是";直接从功能体";意思是内联函数如何调用lambdas?你能给我举几个具体的例子吗?
该文档给出了一个内联函数从另一个执行上下文调用lambdas的例子:
inline fun f(crossinline body: () -> Unit) {
val f = object: Runnable {
override fun run() = body()
}
// ...
}
但是,什么是";另一个执行上下文";?内联函数如何从另一个执行上下文调用lambdas?
非常感谢。
"直接从功能体";意味着lambda将仅作为执行内联函数的一部分来执行。如果lambda存储在某个属性中或传递到其他地方,则认为它是间接执行的。
请注意,在该示例中,lambda被传递给Runnable
对象,它不是由f
函数直接执行的。