为什么使用内联而不使用lambdas

我试图了解如何正确使用inline修饰符。 我理解一般情况下,当我们内联lambda来防止超额分配,如文档中所述 。

我正在检查kotlin stdlib并在_Strings.kt找到以下一段代码:

 @kotlin.internal.InlineOnly public inline fun CharSequence.elementAtOrNull(index: Int): Char? { return this.getOrNull(index) } 

在这里使用inline的原因是什么?

kotlin-stdlib中的这个特殊函数和其他一些函数被标记为@InlineOnly这样它们就不会出现在实际的stdlib类文件中,只能用于Kotlin编译器来内联它们。 通过这种方式实现的目标是减少对Android非常重要的构件中的方法数量。

除此之外,使用不带lambda表达式的inline函数对于重写类型参数非常有用。

仍然有开销,不管多么微小,都可以避免。

内联扩展属性的类似讨论。

一个关于Kotlin扩展的文章,它涉及字节码效应

我认为这与效率有关。 而不是调用函数elementAtOrNull,因此getOrNull直接调用这个函数。