在围棋,语言,函数被称为高阶函数如果满足下列条件之一:
1. 将函数作为参数传递给另一个函数:
如果一个函数作为参数传递给另一个函数,那么这种类型的函数称为高阶函数。这种作为参数传递的函数在 Go 语言中也称为回调函数或一等函数。
如下例所示,这里的Sphere()函数将一个函数作为参数,并返回vol float64作为参数。在 Main函数,我们创建了一个匿名函数,其签名与 Sphere函数的参数匹配,因此,我们只需调用 Sphere()函数并将结果作为参数传递给它。
例子:
CSharp
// Golang program to illustrate how to pass
// a function as an argument to another
// function
package main
import (
"fmt"
"math"
)
// Volume function takes
// a function as a argument
func Sphere(vol func(radius float64) float64) {
fmt.Println("Volume of Sphere is:", vol(3))
}
// Main Function
func main() {
volume_of_sphere := func(radius float64) float64 {
result := 4 / 3 * math.Pi * radius * radius * radius
return result
}
// Passing function as an
// argument in Volume function
Sphere(volume_of_sphere)
}
CSharp
// Golang program to illustrate how to pass
// a function returns another function
package main
import (
"fmt"
"math"
)
// Here, Volume function returns
// an anonymous function
func Sphere() func(radius float64) float64 {
result := func(radius float64) float64 {
volume := 4 / 3 * math.Pi * radius * radius * radius
return volume
}
return result
}
// Main Function
func main() {
sVol := Sphere()
fmt.Println("Volume of Sphere is:", sVol(5))
}
输出:
Volume of Sphere is: 84.82300164692441
2. 从另一个函数返回函数:
如果一个函数返回另一个函数,那么这种类型的函数被称为高阶函数。它也被称为一等函数。如下例所示,此处的Sphere()函数返回一个匿名函数,该函数接受一个 float64 参数并返回一个 float64 参数。现在在 Main函数,sVol 存储了Sphere()函数返回的函数,因此我们调用sVol并在其中传递一个参数。
例子:
夏普
// Golang program to illustrate how to pass
// a function returns another function
package main
import (
"fmt"
"math"
)
// Here, Volume function returns
// an anonymous function
func Sphere() func(radius float64) float64 {
result := func(radius float64) float64 {
volume := 4 / 3 * math.Pi * radius * radius * radius
return volume
}
return result
}
// Main Function
func main() {
sVol := Sphere()
fmt.Println("Volume of Sphere is:", sVol(5))
}
输出:
Volume of Sphere is: 392.69908169872417