我有帶一個函數作爲參數的封裝級函數(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