我正在尝试了解如何正确使用inline
修饰符。我理解一般情况,当我们内联lambda以防止过度分配时,如docs中所述。
我正在检查kotlin stdlib并在_Strings.kt
中找到以下代码:
@kotlin.internal.InlineOnly
public inline fun CharSequence.elementAtOrNull(index: Int): Char? {
return this.getOrNull(index)
}
在这里使用inline
背后的原因是什么?
答案 0 :(得分:2)
kotlin-stdlib
中的这个特定函数和其他一些函数被标记为@InlineOnly
,因此它们不存在于实际的stdlib类文件中,并且只能用于Kotlin编译器内联它们。以这种方式实现的目标是减少工件中的方法计数,这对于Android来说很重要。
除此之外,使用不带lambda的inline
函数对reifying type parameters非常有用。
答案 1 :(得分:1)
仍有开销,无论多么轻微,都可以避免。
A similar discussion on Inline Extension Properties.
A post on Kotlin Extensions which gets down into the bytecode effects
答案 2 :(得分:0)
我想说这与效率有关。
是直接调用函数elementAtOrNull而不是调用getOrNull函数