为什么某些Kotlin库函数(例如String.kt中的一些扩展函数)被标记为内联,即使它们不是高阶函数



Kotlin文档本身声明如下:

如果内联函数没有可内联的函数参数,也没有具体化的类型参数,编译器将发出警告,因为内联这样的函数不太可能是有益的。

对于String.kt中的以下扩展方法,这两个语句(无内联函数参数没有具体化类型参数

  • public inline fun String.reversed(): String
  • public inline fun String.slice(indices: Iterable<Int>) : String
  • public inline fun CharSequence.random(): Char

有人能解释一下语言设计者可能决定将这些方法标记为内联的具体原因吗?谢谢

正如@somethingsomething在评论中指出的,这个问题以前也有过类似的回答。

JetBrains的一名员工给出的答案是:

这个特定函数和kotlin stdlib中的其他一些函数被标记为@InlineOnly,这样它们就不会出现在实际的stdlib类文件中,并且只能由kotlin编译器内联。以这种方式实现的目标是减少工件中的方法数量,这对Android很重要。

@InlineOnly注释也在这个问题中进行了讨论。

相关内容

  • 没有找到相关文章

最新更新