高阶函数(Higher Order Functions),就是操纵函数的函数,它可能输入参数是函数,或者返回是函数。
例子1,返回一个函数
package main import "fmt" func sum(x, y int) int { return x + y } func partialSum(x int) func(int) int { return func(y int) int { return sum(x, y) } } func main() { partial := partialSum(3) fmt.Println(partial(7)) }
partialSum 返回了一个函数,接受int值,返回一个int值。
例子2,下面这个例子,是一个三层函数的返回。
package main import "fmt" func squareSum(x int) func(int) func(int) int { return func(y int) func(int) int { return func(z int) int { return x*x + y*y + z*z } } } func main() { // 5*5 + 6*6 + 7*7 fmt.Println(squareSum(5)(6)(7)) }
定义函数类型
Golang支持定义自己的函数类型,使用关键字 type
所以上面的代码,经过改写后,就成了下面的样子。 注意,使用函数类型时,参数和返回值要统一替换, 不能只替换一部分。
type First func(int) int type Second func(int) First func squareSum(x int) Second { return func(y int) First { return func(z int) int { return x*x + y*y + z*z } } } func main() { // 5*5 + 6*6 + 7*7 fmt.Println(squareSum(5)(6)(7)) }