我正在阅读kotlin文档,但无法理解一件事。
我们可以使用noinline修饰符来标记 lambda 不应该是inline. 但当我们真正需要它时,真实情况又是怎样呢?
我明白是noinline什么,但不明白为什么。
请注意,当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 甚至给出了这样的建议:
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |