我有带一个函数作为参数的封装级函数(FROB)。对于函数参数,我想传入一个具有特定结构实例的方法(FrobMethod)作为接收者(myFrob)。如何将go方法转换为func?
我发现做到这一点的唯一方法是使用FUNC文字/关闭捕捉目标结构。这需要重复func签名和参数,这看起来太冗长了。有没有更好的办法?
package main
import "fmt"
func Frob(frobber func(int) (string)) {
fmt.Printf("Frob %s\n", frobber(42))
}
type MyFrob struct {
Prefix string
}
func (m MyFrob) FrobMethod(n int) (string) {
return fmt.Sprintf("%s %d", m.Prefix, n)
}
func main() {
myFrob := MyFrob { Prefix: "Hello" }
// C# allows something like this:
//
//Frob(myFrob.FrobMethod)
Frob(func (n int) (string) {
return myFrob.FrobMethod(n)
})
}
...这是一个真实世界的例子是net/http中的HandleFunc。
不是真正的时刻。有一个[开放的bug(http://code.google.com/p/go/issues/detail?id=2280)来获得类似于C# – 2012-04-03 16:04:41
@PaoloFalabella东西:OK,这就是答案我一直在寻找的那种对于。谢谢。 – lnmx 2012-04-03 17:34:17