Kotlin的高階特性:8、Kotlin的行內函數
阿新 • • 發佈:2019-02-03
Kotlin 的行內函數
Kotlin 的函式可以通過一個 inline 的修飾符,將這個函式在編譯期直接內聯到原始碼中。
- 在 Kotlin 中,內部 Lambda 是不允許中斷外部函式執行的
- inline 的 Lambda 可以中斷外部函式呼叫
- crossinline 不允許 inline 的 Lambda 中斷外部函式執行
- noinline 拒絕內聯
inline 的 Lambda 中斷外部函式演示
- 未中斷的情況
- 中斷的情況
crossinline 不允許 inline 的 Lambda 中斷外部函式執行演示
noinline 拒絕內聯
什麼時候要使用 noinline
package zyf.kt
fun main(args: Array<String>) {
show2 ({
println("666")
},{
2
})
}
inline fun show2(l0:()->Unit,l1:()->Int):()->Int{
l0.invoke()
//這裡會提示編譯錯誤
return l1
}
上述函式 show2
接受一個 l0
返回一個 l1
,剛剛圖2已經提到了,會將 lambda
平鋪在程式碼裡,但是 show2
l1
如何也平鋪在程式碼裡,那是不是返回的 l1
的返回值 2 ,就變成了 main 函式的返回值了,那麼程式碼就變的不合法了。
解決方式,在返回值的函式 l1
前,加上 noinline
,使得 l1
不會平鋪在程式碼裡。