我有一个使用reflection和reflect.MakeFunc生成的函数,所以直到运行时我才真正拥有返回类型。
在MakeFunc使用的模板函数内部,是否有办法确定要模板化的具体函数的返回类型?
本质上,是否有一种方法可以在运行时确定当前正在执行的函数的返回类型i?
我知道Out方法:
fn.Type().Out(0)
而且我可以很容易地找到函数的返回类型吗?
但是有一种方法可以找到当前正在执行的函数的返回类型(与显式传递的函数引用相反)。
最佳答案
您应该检查fn.Type().Out(0).Kind()
以获得example:
func main() {
fnTmpl := func(in []reflect.Value) []reflect.Value {
return []reflect.Value{in[0]}
}
makeFn := func(fptr interface{}) {
fn := reflect.ValueOf(fptr).Elem()
fn.Set(reflect.MakeFunc(fn.Type(), fnTmpl))
}
var nFn func(int) int
makeFn(&nFn)
kind := reflect.TypeOf(nFn).Out(0).Kind()
switch kind {
case reflect.Int:
fmt.Println("int")
}
}
关于reflection - 在go中发现当前函数的返回类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24735590/