我有一个将函数作为参数的包级函数(Frob)。对于函数参数,我想传入一个具有特定结构实例的方法(FrobMethod)作为接收者(myFrob)。
我发现完成此操作的唯一方法是使用捕获目标结构的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。
慕后森
相关分类