【发布时间】:2015-12-29 18:04:43
【问题描述】:
给定结构:
type A struct {
total int
}
和函数
(a *A) add func (i int, j int) (int x) {
a.total += i+j
return i+j
}
我想创建一个指向函数的变量并通过该变量调用它。我在为包含结构实例的变量定义签名时遇到问题。
为什么要这样做?因为我想创建一个 func 指针数组并遍历它,所以它按顺序调用它们。使用我的 func 构建块,我可以拥有不同的数组来完成不同的任务。
这两个不编译:
thisfunc func (a *A) (i int, b int) (x int)
thisfunc (a *A) func (i int, b int) (x int)
这个编译但不包括结构实例,当调用 thisfunc 时,缺少一个 - 没有结构实例,即空指针取消引用。
thisfunc func (i int, b int) (x int)
我想做这样的事情:
thisfunc = a.add
b := thisfunc(1,2)
请帮我定义一个变量 thisfunc 其签名匹配 a.add。
【问题讨论】:
-
这不是不可能的,但它可能是不必要的复杂。
thisfunc不能是一个接受结构指针的函数,而不是一个接收器是该结构指针的方法,是否有原因?例如func thisfunc(a *A, i, j int) -
这确实是我所做的。容易得多。知道签名是什么可能很好,但继续生活更重要
标签: go