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