我想实例化一堆相同类型的函数,而不必重复它们的签名。我已经有一个描述该签名的函数类型(下面的fancyFunc
)和另一个使用这种参数的函数(下面的doFancyStuff
)。我将如何做这样的工作?
package main
import "fmt"
type fancyFunc func(a,b,c int) int
func doFancyStuff(f FancyFunc) int {
// Do something special with f
return 42
}
func main() {
// This works but is rather tedious:
f1 := func(a,b,c int) int { return a + b + c }
// I would like to create them like this:
f2 := fancyFunc{ return a * b * c }
// Eventually, they are used like this:
fmt.Println(doFancyStuff(f1))
fmt.Println(doFancyStuff(f2))
}
答案 0 :(得分:5)
您只能像在f1
情况下那样进行操作,或者通过定义常规函数来进行操作。没有像f2
这样的方式。在C语言中,人们使用宏来执行此操作,但是Go没有预处理器(可以使用一些非官方的预处理器)。