从Go中的函数生成方法的简单方法是什么?
使用方法表达式从方法中获取函数非常简单从Go中的函数生成方法的简单方法是什么?,go,Go,使用方法表达式从方法中获取函数非常简单 func (t T) Foo(){} Foo := T.Foo //yelds a function with signature Foo(t T) 现在假设我已经有了 func Foo(t T) 我可以不重写就获得方法T.Foo(),或者至少是简单的方法吗?假设T是一个结构,您可以: func (t T) Foo() { Foo(t) } 假设T是一个结构,您可以: func (t T) Foo() { Foo(t) }
func (t T) Foo(){}
Foo := T.Foo //yelds a function with signature Foo(t T)
现在假设我已经有了
func Foo(t T)
我可以不重写就获得方法
T.Foo()
,或者至少是简单的方法吗?假设T是一个结构,您可以:
func (t T) Foo() {
Foo(t)
}
假设T是一个结构,您可以:
func (t T) Foo() {
Foo(t)
}
如果希望保留函数
Foo(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)
更改为func(t)Foo()
。只要不更改t
的名称,就不必再重写函数本身。如果要保留函数Foo(t)
,例如为了向后兼容,可以定义一个调用现有函数的结构方法:
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)
更改为func(t)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)
}
操场:
这显然不是你通常会做的事情。除非有原因,否则我建议坚持使用现有的方法和函数。其他人已经指出了最好的方法:
func (t T) Foo() { Foo(t) }
但如果出于某种原因需要在运行时执行此操作,则可以执行以下操作:
func (t *T) SetFoo(foo func(T)) {
t.foo = foo
}
func (t T) CallFoo() {
t.foo(t)
}
操场:
这显然不是你通常会做的事情。除非有原因,否则我建议坚持使用现有的方法和函数。是的,我明白,并且完全同意。你确定没有别的办法吗?我们能等一下奇迹般的答案吗?我想没有更好的解决办法了。丹尼尔没有错。只是有这么清楚和简洁的Foo:=T.Foo我想知道相反方向的相同情况,在实践中哪种情况更常见。在语义和技术上,操作看起来是对称的。是的,我明白,并且完全同意。你确定没有别的办法吗?我们能等一下奇迹般的答案吗?我想没有更好的解决办法了。丹尼尔没有错。只是有这么清楚和简洁的Foo:=T.Foo我想知道相反方向的相同情况,在实践中哪种情况更常见。从语义和技术上看,操作看起来是对称的。但是为什么必须是结构?
T
不需要是结构,只要是包中声明的任何类型。但是为什么必须是结构?T
不需要是结构,只要是包中声明的任何类型。这很难看,但仍然是一个不错的想法这很难看,但仍然是一个不错的想法