猿问

在 Go 中从函数创建方法的简单方法是什么?

使用方法表达式从方法中获取函数非常简单


func (t T) Foo(){}

Foo := T.Foo       //yelds a function with signature Foo(t T)

现在假设我已经有了


func Foo(t T)

我可以在T.Foo()不重写的情况下获得方法,或者至少是简单的方法吗?


慕森卡
浏览 155回答 3
3回答

MMTTMM

如果你想保留 function Foo(t T),例如为了向后兼容,你可以简单地定义一个调用已经存在的函数的 struct 方法:type T struct {    // ...}func Foo(t T) {    // ...}// Define new method that just calls the Foo functionfunc (t T) Foo() {    Foo(t)}或者,您可以轻松地将函数签名从 更改func Foo(t T)为func (t T) Foo()。只要不更改 的名称t,就不必再重写函数本身。

一只萌萌小番薯

假设 T 是一个结构体,你可以:func (t T) Foo() {    Foo(t)}

翻过高山走不出你

其他人已经指出了做到这一点的最佳方法: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。这显然不是你通常会做的事情。除非有原因,否则我建议坚持使用方法和函数。
随时随地看视频慕课网APP

相关分类

Go
我要回答