我有一个使用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/

10-14 07:28