Kotlin - 内部函数

Kotlin - 内部函数 首页 / Kotlin入门教程 / Kotlin - 内部函数

内联函数用关键字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函数参数,并且不包含任何类型化的参数,则编译器将生成警告。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

数据结构与算法之美 -〔王争〕

Nginx核心知识150讲 -〔陶辉〕

分布式技术原理与算法解析 -〔聂鹏程〕

说透中台 -〔王健〕

Service Mesh实战 -〔马若飞〕

深度学习推荐系统实战 -〔王喆〕

程序员的个人财富课 -〔王喆〕

eBPF核心技术与实战 -〔倪朋飞〕

超级访谈:对话毕玄 -〔毕玄〕

好记忆不如烂笔头。留下您的足迹吧 :)