第二十二节 闭包、高阶函数

1、闭包
一个函数返回了一个内部函数,该内部函数引用了
外部函数的相关参数和变量,我们把该返回的内部函数称
为闭包
看两个例子:

fun main(args: Array) {

    test()
    test()
    test()
}

fun test()
{
    var a=10
    println(a)
    a++
}

输出:


image.png

修改代码:

fun main(args: Array) {

    val result=test()
    result()
    result()
    result()
}

fun test():()->Unit
{
    var a=10
    return {
        println(a)
        a++
    }
}

输出:


image.png
return {
        println(a)
        a++
    }

这个就是一个闭包
2、高阶函数
需求:定义两个函数分别实现两个数的加和减

fun main(args: Array) {

    val a=10
    val b=5
    println(add(a, b))
    println(sub(a, b))
    //把a,b以及方法的引用传递给cacl
    println(cacl(a, b, ::add))
    println(cacl(a, b, ::sub))

}

fun add(a:Int,b:Int):Int
{
    return a+b
}

fun sub(a:Int,b:Int):Int
{
    return a-b
}

fun cacl(a:Int,b:Int,block:(Int,Int)->Int):Int{
    val result=block(a,b)
    return result
}

输出:


image.png

在上面的例子中cacl就是高阶函数,sub和add是普通函数
高阶函数:如果函数里面传递函数参数的话 就称为高阶函数

你可能感兴趣的:(第二十二节 闭包、高阶函数)