Este programa imprime las funciones teniendo un int
como parámetro o devolver un int
:
package main
import (
"fmt"
"reflect"
)
func main() {
funcs := make([]interface{}, 3, 3) // I use interface{} to allow any kind of func
funcs[0] = func (a int) (int) { return a+1} // good
funcs[1] = func (a string) (int) { return len(a)} // good
funcs[2] = func (a string) (string) { return ":("} // bad
for _, fi := range funcs {
f := reflect.ValueOf(fi)
functype := f.Type()
good := false
for i:=0; i<functype.NumIn(); i++ {
if "int"==functype.In(i).String() {
good = true // yes, there is an int among inputs
break
}
}
for i:=0; i<functype.NumOut(); i++ {
if "int"==functype.Out(i).String() {
good = true // yes, there is an int among outputs
break
}
}
if good {
fmt.Println(f)
}
}
}
Creo que el código se explica por sí
A ver si [este hilo en golang-tuercas] (https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/uGTYQzJ9Cfs) ayuda –
¿Puedes explicar el problema que estás tratando de resolver en lugar de la solución que intentas implementar? Es probable que haya una forma más fácil de hacerlo en Go. El tipo de enfoque que estás intentando es muy incómodo en Go. Dependiendo de lo que trates de hacer, la sugerencia de dystroy puede ser tu única opción, pero hay muchas posibilidades de que puedas hacer algo mucho menos confuso. – jorelli
No, lo que estoy tratando de hacer es, de hecho, confuso. Considere crear un gráfico donde cada nodo sea una función. Quiero buscar en el espacio de gráficos dada una lista arbitraria de funciones. La idea sería que se pueda usar como un aproximador de funciones a nivel de Machine Learning. Creo que la solución de dystroy es lo que quiero. Si desea sugerir un idioma en el que sería más agradable, estoy abierto a las ideas. He oído que C# podría hacerlo. – placeybordeaux