为了账号安全,请及时绑定邮箱和手机立即绑定

使用反射检查分配给 interface{} 变量的函数签名

使用反射检查分配给 interface{} 变量的函数签名

Go
Qyouu 2021-07-29 21:19:02
我正在尝试构建一个 通用的 咖喱 看起来像这样的功能:package curryimport (    "fmt"    "reflect")// Functiontype fn interface{}// Function parametertype pr interface{}// It return the curried functionfunc It(f fn, p ...pr) (fn, error) {    // examine the concret type of the function f    if reflect.ValueOf(f).Kind() == reflect.Func {    // Get the slice of input and output parameters type     } else {        return nil, fmt.Errorf("%s", "takes a function as a first parameter")    }    // _, _ = f, p    return nil, nil}是否可以[]reflect.Type从函数中提取输入和输出参数类型的切片f?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

Go 1.5 将添加一个可以在这里提供帮助的功能。(回顾 1996 年,由Dave ( )提交 e1c1fa2)okdave


// FuncOf returns the function type with the given argument and result types.

// For example if k represents int and e represents string,

// FuncOf([]Type{k}, []Type{e}, false) represents func(int) string.

//

// The variadic argument controls whether the function is variadic. FuncOf

// panics if the in[len(in)-1] does not represent a slice and variadic is

// true.

func FuncOf(in, out []Type, variadic bool) Type

测试用例包括以下有趣的代码:


v := MakeFunc(FuncOf([]Type{TypeOf(K(""))}, []Type{TypeOf(V(0))}, false), fn)

outs := v.Call([]Value{ValueOf(K("gopher"))})


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信