鉴于结构:
type A struct {
total int
}
和func
(a *A) add func (i int, j int) (int x) {
a.total += i+j
return i+j
}
我想创建一个指向func的变量,并通过该变量调用它。我在为包含struct实例的变量定义签名时遇到了麻烦。
为什么这样?因为我想创建一个func指针数组并迭代它,它按顺序调用它们。我可以使用不同的数组来使用我的func构建块来完成不同的任务。
这两个不编译:
thisfunc func (a *A) (i int, b int) (x int)
thisfunc (a *A) func (i int, b int) (x int)
这个编译但不包括struct实例,并且在调用thisfunc时,缺少a - 没有struct实例,即空指针解除引用。
thisfunc func (i int, b int) (x int)
我想做这样的事情:
thisfunc = a.add
b := thisfunc(1,2)
请帮我定义一个变量thisfunc,其签名与a.add匹配。
答案 0 :(得分:3)
我认为你要找的是"Method Values"
给定类型A
:
type A struct {
total int
}
func (a *A) add(i int, j int) int {
a.total += i + j
return i + j
}
虽然(*A).add
func(*A, int, int)
在技术上具有
add
您可以将func(int int)
方法的值用作签名
var thisfunc func(int, int) int
a := A{}
thisfunc = a.add
thisfunc(3, 4)
可以像这样分配:
{{1}}