1 回答

TA貢獻1805條經驗 獲得超9個贊
鍵入斷言方法值到具有適當簽名的函數。調用那個函數。
問題的第一個例子:
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))
}
問題的第二個例子:
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 關注
- 138 瀏覽
添加回答
舉報