Q
功能类型转换
-1
A
回答
0
有没有“铸造”是去(好吧,使用“不安全”的包装类似铸造)。
你不能像这样转换函数类型,因为它们在内存中有不同的布局。泛型函数可以通过反射包来完成,但是会带来很大的开销。一个例子见http://golang.org/pkg/reflect/#example_MakeFunc。
对于大多数泛型函数的用例,您可能最好接受一个接口,并使用类型断言或开关(http://golang.org/ref/spec#Type_switches),而不是反射库。
1
正如JimB说,你不能去投,你不能转换功能,只是这样的,但通过使用闭包,您可以迅速换你的函数:
func add(a, b int) int {
return a + b;
}
wrap := func(args ...interface{}) interface{} {
return interface{} (add(args[0].(int), args[1].(int)))
}
需要注意的是,如果你给纸都会恐慌它不是int类型的参数。如果你想避免这种情况,你可以稍微修改后余音:
wrap := func(args ...interface{}) (interface{}, error) {
a, k := args[0].(int)
b, l := args[1].(int)
if !k || !l {
return nil, errors.New("Arguments must be of type int")
}
return add(a,b), nil
}
如果你想要做不同的事情保鲜膜,这取决于它的参数类型,您可以通过使用式开关这样做:
func addInts(a, b int) int {
return a + b;
}
func addFloat64s(a, b float64) float64 {
return a + b;
}
wrap := func(args ...interface{}) interface{} {
switch args[0].(type) {
case int: return interface{}(addInts(args[0].(int), args[1].(int)))
case float64: return interface{}(addFloat64s(args[0].(float64), args[1].(float64)))
}
}
请注意,这最后一个版本的包装使得所有给定的参数将具有相同的类型并给出至少2个参数的假设。
相关问题
- 1. 类类型转换:为什么类型转换功能不叫
- 2. 功能类型转换的JavaScript
- 3. 转换算符对类型功能
- 4. 功能指针类型转换
- 5. 转换功能型Golang
- 6. 转换功能ES6类
- 7. 转换功能到另一种类型(功能铸造)在转到
- 8. C#泛型类型转换Decimal转换为Float - “不能转换类型'T1'? 'T2'“
- 9. 如何使一个泛型类型转换功能
- 10. 转换功能,使一些类型的类的实例
- 11. 类的名称,类型转换幂等功能
- 12. 转换功能
- 13. LINQ功能上型转换失败
- 14. 转换此功能使用泛型
- 15. 泛型:类型不能隐式转换
- 16. java.lang.ClassCastException:java.lang.String不能转换为类别类型
- 17. 转换为非标量类型请求(功能)
- 18. 如何将ML VectorUDT功能从.mllib转换为.ml类型
- 19. 线程功能是给类型转换错误
- 20. 在mysql中寻找类型转换功能
- 21. 类型转换功能于一体用C
- 22. 的Javascript功能转换声明为功能字典原型
- 23. CXF转换功能
- 24. ESB转换功能
- 25. 转换功能,PHP
- 26. 类型转换类
- 27. 转换类型
- 28. 类型转换
- 29. 类型转换++
- 30. 转换类型