1 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
鍵入斷言方法值到具有適當(dāng)簽名的函數(shù)。調(diào)用那個(gè)函數(shù)。
問(wèn)題的第一個(gè)例子:
type F struct{}
func (f F) ClosureFn(i int) func(int) int {
? ? return func(x int) int {
? ? ? ? return x + i
? ? }
}
func main() {
? ? var f F
? ? fn := reflect.ValueOf(&f).MethodByName("ClosureFn")
? ? fn0 := fn.Call([]reflect.Value{reflect.ValueOf(99)})[0].Interface().(func(int) int)
? ? fmt.Println(fn0(100))
? ? // It's also possible to type assert directly?
? ? // the function type that returns the closure.
? ? fn1 := fn.Interface().(func(int) func(int) int)
? ? fmt.Println(fn1(99)(100))
}
問(wèn)題的第二個(gè)例子:
func (f GenericCollection) JobFactoryCl(name string, jobtype int) func(int) int {
? ? jf := reflect.ValueOf(&f).MethodByName("Job_by_" + name + "_Cl").Interface().(func(int) func(int) int)
? ? return jf(jobtype)
}
func main() {
? ?jjf := &GenericCollection{jobs: []*Generic{}}
? ?jf := jjf.JobFactoryCl("Type", 20)
? ?fmt.Println(jf(10))
}
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)