Kotlin内联

/**
 * 不声明inline的时候,不会被平铺,不会被优化
 */
fun test1(block: () -> Unit) {
    block()
}

/**
 * 声明inline的时候,会被平铺,但是inline的Lambda可以断外部函数
 */
inline fun test2(block: () -> Unit) {
    block()
}

/**
 * 声明inline的时候,会被平铺
 * 声明crossinline的时候,不允许inline的Lambda中断外部函数
 */
inline fun test3(crossinline block: () -> Unit) {
    block()
}

fun main(args: Array<String>) {
    test1 {
        println(1)
    }
    println(2)
    println("------------")

    test2 {
        println(1)
        // 在return的会把外层main函数返回掉了
        return
    }
    println(2)
    println("------------")

    test3 {
        println(1)
        // 声明crossinline的时候,不允许inline的Lambda中断外部函数
        // return
    }
    println(2)
    println("------------")
}

推荐阅读更多精彩内容