首页 > 解决方案 > kotlin 中的“直接来自函数体”是什么意思?

问题描述

Kotlin 关于内联函数的文档说

请注意,某些内联函数可能不直接从函数体调用作为参数传递给它们的 lambda,而是从另一个执行上下文(例如本地对象或嵌套函数)调用。在这种情况下,lambdas 中也不允许非本地控制流。为了表明这一点,需要用 crossinline 修饰符标记 lambda 参数:

“直接来自函数体”是什么意思?内联函数如何调用 lambda?你能给我一些具体的例子吗?

该文档提供了一个从另一个执行上下文调用 lambda 的内联函数示例:

inline fun f(crossinline body: () -> Unit) {
    val f = object: Runnable {
        override fun run() = body()
    }
    // ...
}

但是,什么是“另一个执行上下文”?内联函数如何从另一个执行上下文中调用 lambda?

非常感谢。

标签: kotlin

解决方案


“直接来自函数体”意味着 lambda 将仅作为执行内联函数的一部分执行。如果 lambda 存储在某个属性中或传递到其他地方,则认为它是间接执行的。

请注意,在示例中,lambda 被传递给Runnable对象,它不是由f函数直接执行的。


推荐阅读