内联函数用关键字inline声明,内联函数的使用增强了高阶函数的性能。内联函数告诉编译器将参数和函数复制到调用站点。
虚函数或局部函数不能声明为内联。以下是内联函数中某些地方不支持的一些表达式和声明:
让无涯教程看看内联函数的基本示例:
fun main(args: Array<String>) { inlineFunction({ println("calling inline functions")}) } inline fun inlineFunction(myFun: () -> Unit ) { myFun() print("code inside inline function") }
输出:
calling inline functions code inside inline function
从内联函数,无涯教程可以从lambda表达式本身返回。这也将导致退出调用内联函数的函数。在这种情况下,允许函数文字包含非本地的return语句。
fun main(args: Array<String>) { inlineFunction({ println("calling inline functions") return},{ println("next parameter in inline functions")}) } inline fun inlineFunction(myFun: () -> Unit, nxtFun: () -> Unit) { myFun() nxtFun() print("code inside inline function") }
输出:
calling inline functions
为了防止从lambda表达式和内联函数本身返回,无涯教程可以将lambda表达式标记为crossinline。如果在该lambda表达式中找到了return语句,则将引发编译器错误。
fun main(args: Array<String>) { inlineFunction({ println("calling inline functions") return // 编译时错误 },{ println("next parameter in inline functions")}) } inline fun inlineFunction(crossline myFun: () -> Unit, nxtFun: () -> Unit) { myFun() nxtFun() print("code inside inline function") }
在内联函数中,当无涯教程希望将在内联函数中传递的某些lambda作为内联时,使用inline修饰符标记其他函数参数。
fun main(args: Array<String>) { inlineFunctionExample({ println("calling inline functions")}, { println("next parameter in inline functions")} ) println("this is main function closing") } inline fun inlineFunctionExample(myFun: () -> Unit, noinline nxtFun: () -> Unit ) { myFun() nxtFun() println("code inside inline function") }
输出:
calling inline functions next parameter in inline functions code inside inline function this is main function closing
如果一个内联函数不包含任何inline函数参数,并且不包含任何类型化的参数,则编译器将生成警告。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)