为什么我们在 kotlin 中需要 noinline?

Вас*_*пуп 5 inline kotlin

我正在阅读kotlin文档,但无法理解一件事。

我们可以使用noinline修饰符来标记 lambda 不应该是inline. 但当我们真正需要它时,真实情况又是怎样呢?

我明白是noinline什么,但不明白为什么。

Swe*_*per 8

请注意,当inline添加到函数/方法声明中时,其所有lambda 参数都是内联的。

另请注意,您可以通过某些方式使用 lambda 参数,但要求 lambda 不能内联。例如,将其传递给另一个非内联函数,或将其分配给变量:

var func: (() -> Unit)? = null
inline fun foo(x: () -> Unit, y: () -> Unit) {
    notInlined(x) // x must be not inlined for this to work
    func = x // x must be not inlined for this to work
}
Run Code Online (Sandbox Code Playgroud)

如果我想做notInlined(x),但仍想内联怎么办y?这是我使用的地方noinline

inline fun foo(noinline x: () -> Unit, y: () -> Unit)
Run Code Online (Sandbox Code Playgroud)

IntelliJ 甚至给出了这样的建议:

在此输入图像描述