包含struct方法的变量

时间:2015-12-29 18:04:43

标签: go

鉴于结构:

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匹配。

1 个答案:

答案 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}}

method expression