Kotlin教程:内联函数

2020-04-2020:44:32编程语言入门到精通Comments1,304 views字数 1474阅读模式

内联函数使用关键字内联声明,内联函数的使用增强了高阶函数的性能。 内联函数告诉编译器将参数和函数复制到调用站点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

虚函数或局部函数不能声明为内联。 以下是内联函数内部不支持的一些表达式和声明:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

  • 局部类声明
  • 内部嵌套类的声明
  • 函数表达式
  • 声明局部函数
    局部可选参数的默认值

让我们看一下内联函数的基本示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

fun main(args: Array<String>) {
    inlineFunction({ println("调用内联函数")})
}

inline fun inlineFunction(myFun: () -> Unit ) {
    myFun()
    print("内联函数内的代码")
}

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

调用内联函数
内联函数内的代码
Shell

非局部控制流程

从内联函数,可以从lambda表达式本身返回。 这也将导致退出调用内联函数。 在这种情况下,允许函数文字具有非局部返回语句。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

fun main(args: Array<String>) {
    inlineFunction({ println("调用内联函数")
        return},{ println("内联函数中的下一个参数")})
}

inline fun inlineFunction(myFun: () -> Unit, nxtFun: () -> Unit) {
    myFun()
    nxtFun()
    print("内联函数内的代码")
}

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

调用内联函数
Shell

crossline注解

要防止从lambda表达式和内联函数本身返回,可以将lambda表达式标记为crossinline。 如果在lambda表达式中找到了return语句,则会抛出编译器错误。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

fun main(args: Array<String>) {
    inlineFunction({ println("calling inline functions")
        return // compile time error
    },{ println("next parameter in inline functions")})
}

inline fun inlineFunction(crossline myFun: () -> Unit, nxtFun: () -> Unit) {
    myFun()
    nxtFun()
    print("code inside inline function")
}
Kotlin

noinline修饰符

在内联函数中,当想要将内联函数中传递的一些lambda作为内联函数时,使用noinline修饰符标记其他函数参数。它用于设置不在调用中内联的表达式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

fun main(args: Array<String>) {
    inlineFunctionExample({  println("调用内联函数")},
        {  println("内联函数中的下一个参数")} )

    println("这是关闭main函数")
}

inline fun inlineFunctionExample(myFun: () -> Unit, noinline nxtFun: () -> Unit  ) {
    myFun()
    nxtFun()
    println("内联函数内的代码")
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

调用内联函数
内联函数中的下一个参数
内联函数内的代码
这是关闭main函数
Shell

如果内联函数不包含noinline函数参数且没有reified类型参数,则编译器将生成警告。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/kotlin/kotlin-inline-function.html文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18267.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/18267.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定