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)
    }
  • 相关阅读:
    【转】PCA for opencv
    【转】PCA算法学习_1(OpenCV中PCA实现人脸降维)
    从输入URL到页面渲染完成(转)
    前端面试笔记(整理)
    这样“断舍离”,你会活得更高级
    angular5.x全局loading解决方法
    angular路由守卫
    优化回流和重绘
    回流 (Reflow)和重绘 (Repaint)
    Javascript获取数组中最大和最小值
  • 原文地址:https://www.cnblogs.com/staff/p/13222342.html
Copyright © 2011-2022 走看看