2 回答
TA贡献1796条经验 获得超10个赞
我明白你在做什么,一些模板,对吧?但这不会以这种方式工作。您的f func(a interface{}, b interface{})参数不是接口,因此它必须是匹配类型。你可以通过传递来实现你想要的f interface{},然后用 package.json 操作它reflect。
一些天真的例子:
package main
import (
"fmt"
"reflect"
)
func bindSecond(value interface{}, f interface{}) func(c interface{}) {
return func(arg interface{}) {
reflect.ValueOf(f).Call([]reflect.Value{reflect.ValueOf(arg), reflect.ValueOf(value)})
}
}
func main() {
sum := func(x int, y int) { fmt.Println(x + y) }
inc := bindSecond(1, sum)
inc(10)
}
// Prints 11
可行,但不是很漂亮。如果发生任何意外,运行时会发生恐慌,例如f不可调用且不完全采用两个参数。或者您将错误的类型传递给inc. Complier 不会再帮助您了。
TA贡献2080条经验 获得超4个赞
替换interface{}
为int
,它将起作用。
或者,更重要的是,尝试使用 Go 提供的功能找到原始问题的解决方案,而不是尝试从不同的范式中强制解决方案。
- 2 回答
- 0 关注
- 196 浏览
添加回答
举报