Kotlin inline noinline crossinline浅析

170 阅读1分钟

inline

  • 内联函数:使用 inline 声明的函数,在编译时将会拷贝到调用的地方。

noinline

  • 在内联函数中,当有多个 lambda 作为参数时,可以在不想内联的 lambda 前使用 noinline 声明.

crossinline

  • 避免内联函数中的 return 影响程序流程。
  • crossinline修饰的lambda不能直接使用return语句,但可以使用可return@label语句。

sample

private fun toEllipsisTest(){
    val mStr = "Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。"
    val result = mStr.toEllipsis {
        return@toEllipsis "你好 " //return@label语句返回
    }
    println(result)
}
                                //crossinline修饰,避免内联函数中的return影响程序流程
private inline fun String.toEllipsis(crossinline prefix: () -> String = { "" }): String {
    val invoke = prefix.invoke()
    val ellipsis = if (this.length>25){
        this.substring(0,25)+ "..."
    }else{
        this
    }
    return "$invoke$ellipsis"
}

你好 Kotlin 是一门现代但已成熟的编程语言,旨在让...