我正在尝试构建一个 通用的 咖喱 看起来像这样的功能: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"))})
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消