zoukankan      html  css  js  c++  java
  • go:匿名函数

    1. 简介

      当不想给函数命名时,可以使用匿名函数,匿名函数不能独立存在,必须将匿名函数赋值给某个变量,然后通过这个变量调用对应的匿名函数;

      示例:

    func main() {
    
        fpx:= func(x,y int)(z int) {
            return x+y
        }
        fmt.Println(fpx(1,2))
    }

      输出结果:3

    2. 将匿名函数作为返回值

    2.1 普通匿名函数

    func main() {
    
        fpx:=Add2() // 返回 Add2() 中 return 的函数,即 b +2 
        z := fpx(1) // 将 1 传入函数,即 1 + 2 = 3
        fmt.Println(z)
    }
    
    func Add2() func(b int) int {
        return func(b int) int {
            return b + 2
        }
    }

    2.2  匿名函数引用外部函数变量

      引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量),直到闭包的生命周期结束。

    func main() {
    
        // 引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量)
        aa := append("q")
        fmt.Println(aa("w"))
        fmt.Println(aa("e"))
        fmt.Println(aa("r"))
    }
    
    func append(a string) func(b string) string {
        var s = a
        return func(b string) string {
            s = s + b
            return s
        }
    }

    输出结果:

     2.3 工厂函数

      如果需要创建较多功能类似的函数时,可以通过闭包的形式创建一个工厂函数;

      示例:创建一个给文件名添加不同后缀的工厂函数

    func main() {
    
        suffixTxt := makeAppendSuffix("txt")
        fmt.Println(suffixTxt("a"))
        fmt.Println(suffixTxt("b"))
        suffixMp4 := makeAppendSuffix("mp4")
        fmt.Println(suffixMp4("xx"))
        fmt.Println(suffixMp4("zz"))
    
    }
    
    func makeAppendSuffix(suffix string) func(name string) (totalName string) {
        return func(name string)(totalName string) {
            return name + "." + suffix
        }
    }

    输出结果:

  • 相关阅读:
    力扣(LeetCode)验证回文串 个人题解(C++)
    力扣(LeetCode)平方数之和 个人题解
    Exclusive Access 2 UVA
    C语言中指针*p[N], (*P)[N]的区别
    2018年蓝桥杯国赛比赛心得
    2018acm/icpc西安邀请赛比赛心得
    [最小割]Cable TV Network UVA
    Tree Reconstruction UVA
    Twenty Questions UVA
    python中的enumerate 函数(编号的实现方式)
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12931895.html
Copyright © 2011-2022 走看看