为什么使用内联而不使用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直接调用这个函数。