zoukankan      html  css  js  c++  java
  • Go 高阶函数,闭包

    函数本身可作为参数和返回值(高阶函数)

    函数也可以作为参数,传给别的函数,函数也可以作为返回值,那函数是什么类型呢?

    确定函数类型的目的是写在参数和返回值里:  func  f1 ( f  func() )  func() int{  ...  }

    无参数无返回值:   func()
    无参数返回int:   func() int
    两个int参数一个int返回值:  func(int, int) int

    其他的类比。  不确定可以用fmt.Printf("%T", func)

    闭包

    闭包就是在函数里定义的匿名函数内可以使用该函数的参数。相当于把传给该函数的参数保存在了匿名函数

    匿名函数

    跟普通函数一样,去掉名字就行,在函数内部使用。
    func(a int, b int) int {
          return a + b
    }

    应用:用不带参数的方式调用一个带参数的函数

    一个函数,比如
    func add(a int,b int) int {
         return a + b
    }

    我想让它在另外一个函数内,以f()的方式调用,使用方式见下:
    f = wrapper(add, a, b)
    可以把 f 作为参数,传给别的函数,别的函数执行时,就直接f()就行

    package main

    import (
        "fmt"
    )

    func add(a int, b int) int {
        return a + b
    }

    func wrapper(f func(int, int) int, a int, b int) func() int {
        inner := func() int {
            return f(a, b)
        }
        return inner
    }

    func funcA(f func() int) int {
        fmt.Println("in funcA")
        ret := f()
        return ret
    }

    func main() {
        f := wrapper(add, 1, 2)
        fmt.Println(f())
        //也可以将f传给别的函数
        funcA(f)
    }
  • 相关阅读:
    SCAU 12新生赛 H 拥挤的华农校巴
    C#实现让CPU占用率曲线听你的指挥 可指定运行核心
    追MM与设计模式的有趣见解
    FTP操作类
    怎么知道页面被放大缩小了
    SerialPort同步和异步数据读取
    Java Web 应用程序转换为 ASP.NET
    ASP.NET中进行消息处理(MSMQ)
    解压缩文件类
    怎样成为优秀的软件模型设计者?
  • 原文地址:https://www.cnblogs.com/staff/p/13222342.html
Copyright © 2011-2022 走看看