• 函数变量


    • 在Go语言中函数也是一种类型,函数有多少种形式,函数变量就有多少种写法
        var a func()           //无参数无返回值
        var b func(int)        //有一个int类型参数
        var c func(int) string //有一个int类型参数和string类型返回值
        fmt.Println(a, b, c)   //输出:<nil> <nil> <nil>
    • 定义完函数变量后,可以使用匿名函数进行赋值.也可以使用已经定义好的函数进行赋值

    • 函数变量定义以后与普通函数调用语法相同,变量名就是普通函数声明的函数名

    func main() {
        var a func()
        a = func() {
            fmt.Println("执行函数")
        }   //注意此处没有括号,有括号表示调用函数,变量a就表示接收函数返回值
        a() //调用函数
    
        /*
        也可以使用短变量方式定义函数变量
        等效于
        func b(s string){
            //...
        }
         */
        b := func(s string) {
            fmt.Println("执行第二个函数")
        }
        b("参数")
    
        //使用定义好的函数
        d := c
        d()
        //函数名称c也是一个变量
        c()
    }
    
    func c() {
        fmt.Println("c函数")
    }
    • 函数类型变量是除了slice、map、channel、interface外第五种引用类型
    func main() {
        var a func()
        a = b
        a()
        var c func()
        c = a
        c()
        fmt.Printf("%p %p", a, c)//输出地址相同
    }
    
    func b() {
        fmt.Println("b")
    }

    函数作为参数或返回值

    • 变量可以作为函数的参数或返回值类型.而函数既然可以当做变量看待,函数变量也可以当做函数的参数或返回值

    • 函数作为参数时,类型写成对应的类型即可

    func main() {
        a(func(s string) {
            fmt.Println(s)
        })
    }
    
    func a(b func(s string)) {
        fmt.Println("a执行")
        b("传递给s的内容")
    }
    • 函数作为返回值
    func main() {
        //此时result指向返回值函数.
        result := a()
        //调用函数,才能获取结果
        fmt.Println(result())
    }
    
    func a() func() int {
        return func() int {
            return 110
        }
    }
  • 相关阅读:
    bzoj1023: [SHOI2008]cactus仙人掌图
    bzoj2816: [ZJOI2012]网络
    bzoj2329: [HNOI2011]括号修复(fhq treap)
    bzoj1500: [NOI2005]维修数列(fhq treap)
    bzoj千题计划220:bzoj3938: Robot
    bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
    bzoj千题计划218:bzoj2333: [SCOI2011]棘手的操作
    bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作
    单调队列优化多重背包
    bzoj千题计划216:bzoj1499: [NOI2005]瑰丽华尔兹
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12095402.html
Copyright © 2020-2023  润新知