使用方法表达式从方法中获取函数非常简单func (t T) Foo(){}Foo := T.Foo //yelds a function with signature Foo(t T)现在假设我已经有了func Foo(t T)我可以在T.Foo()不重写的情况下获得方法,或者至少是简单的方法吗?
3 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
如果你想保留 function Foo(t T),例如为了向后兼容,你可以简单地定义一个调用已经存在的函数的 struct 方法:
type T struct {
// ...
}
func Foo(t T) {
// ...
}
// Define new method that just calls the Foo function
func (t T) Foo() {
Foo(t)
}
或者,您可以轻松地将函数签名从 更改func Foo(t T)为func (t T) Foo()。只要不更改 的名称t,就不必再重写函数本身。
翻过高山走不出你
TA贡献1875条经验 获得超3个赞
其他人已经指出了做到这一点的最佳方法:
func (t T) Foo() { Foo(t) }
但是如果您出于某种原因需要在运行时执行此操作,您可以执行以下操作:
func (t *T) SetFoo(foo func(T)) {
t.foo = foo
}
func (t T) CallFoo() {
t.foo(t)
}
游乐场:http : //play.golang.org/p/A3G-V0moyH。
这显然不是你通常会做的事情。除非有原因,否则我建议坚持使用方法和函数。
- 3 回答
- 0 关注
- 154 浏览
添加回答
举报
0/150
提交
取消