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
        }
    }

    输出结果:

  • 相关阅读:
    poj 3280 Cheapest Palindrome (dp)
    hdu 4359 Easy Tree DP? ( dp )
    hdu 2844 Coins (多重背包+ 二进制优化)
    三分法 讲解
    poj 1191 棋盘分割 (dp)
    hdu 4340 Capturing a country(树形 dp) (2012 MultiUniversity Training Contest 5 )
    子类和父类的构造函数
    CreateProcess执行一个控制台程序,隐藏DOS窗口
    单个字符比较
    MFC 程序入口和执行流程
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12931895.html
Copyright © 2011-2022 走看看