e.g:
func f[T any](t T) T {
var result T
return result
}
// this got error !
var fAnonymous = func[T any](t T) T {
var result T
return result
}
fAnonymous
出错了,错误信息如下:
函数字面量不能有类型参数
那么,为什么 Golang 不允许匿名函数是泛型的呢?
e.g:
func f[T any](t T) T {
var result T
return result
}
// this got error !
var fAnonymous = func[T any](t T) T {
var result T
return result
}
fAnonymous
出错了,错误信息如下:
函数字面量不能有类型参数
那么,为什么 Golang 不允许匿名函数是泛型的呢?
函数字面量不能是泛型的,因为函数字面量会产生一个函数值,而函数值不能是泛型的。同样地,如果您有一个泛型函数,您也不能将其用作函数值。例如:
func RegularFunction() {}
func GenericFunction[T any]() {}
func main() {
// fine, since regular function can act as a value
var f1 func() = RegularFunction
// not valid, since a generic function is not a function value
// Error: "cannot use generic function GenericFunction without instantiation"
var f2 func() = GenericFunction
// fine, since the generic function has been instantiated
var f3 func() = GenericFunction[int]
}
// vvvvvvvvvvvvv this is the type of normalFunc
var normalFunc func(int) int = func(i int) int {
return i + 1
}
// vvvvvv what type would go here?
var genericFunc = func[T any](t T) T {
var result T
return result
}
fAnonymous
在此处无法赋予任何类型。通用函数不是Go类型系统中的一种类型;它们只是一种语法工具,用于实例化带有类型替换的函数。