gpt4 book ai didi

function - 调用函数而不考虑其参数类型

转载 作者:IT王子 更新时间:2023-10-29 01:59:20 25 4
gpt4 key购买 nike

假设我有一个函数驻留在以下 Method 结构的 fn 属性中:

type Method struct {
fn interface{}
}

var inst = &Method{func(a, b int) int {
return a + b
}}

现在,我想用两个参数调用这个函数没有将其显式转换为 func(int, int) int 之类的所以

a := 5
b := 6
fmt.Println(inst.fn(a, b))

我怎样才能做到这一点?有一些通用的解决方案吗?

最佳答案

我知道的唯一方法是使用 reflect.Value.Call :

type Method struct {
fn interface{}
}

func (m Method) Call(args ...interface{}) {
vs := make([]reflect.Value, len(args))
for i := range args {
vs[i] = reflect.ValueOf(args[i])
}
v := reflect.ValueOf(m.fn)
v.Call(vs)
}

func main() {
f := func(a, b int) {
fmt.Println(a + b)
}
m := Method{f}
m.Call(2, 3)
}

Playground :http://play.golang.org/p/JNtj2EMpu7 .

注意:如果 fn 不是函数,或者参数的数量或类型错误,这将导致 panic。如果您不想这样,您需要自己重新检查所有这些条件。

关于function - 调用函数而不考虑其参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com