函数本身可作为参数和返回值(高阶函数)
函数也可以作为参数,传给别的函数,函数也可以作为返回值,那函数是什么类型呢?
确定函数类型的目的是写在参数和返回值里: 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)}