Questo programma stampa le funzioni prendere un int
come parametro o la restituzione di 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)
}
}
}
Credo che il codice si spiega da sé
fonte
2012-09-17 15:40:42
Vedere se [questa discussione su golang-dadi] (https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/uGTYQzJ9Cfs) aiuta –
puoi spiegare il problema che stai cercando di risolvere al posto della soluzione che stai cercando di implementare? C'è probabilmente un modo più semplice per farlo in Go. Il tipo di approccio che stai tentando è molto imbarazzante in Go. A seconda di ciò che stai cercando di fare, il suggerimento di dystroy potrebbe essere la tua unica opzione, ma ci sono buone possibilità che tu possa fare qualcosa di molto meno confuso. – jorelli
No, quello che sto cercando di fare è in realtà confuso. Prendi in considerazione la creazione di un grafico in cui ogni nodo è una funzione. Voglio cercare nello spazio dei grafici dato un elenco arbitrario di funzioni. L'idea sarebbe che possa essere usato come approssimatore di funzioni per Machine Learning. Credo che la soluzione di distosteria sia ciò che voglio. Se vuoi suggerire un linguaggio in cui sarebbe più bello, sono aperto alle idee. Ho sentito che C# potrebbe farlo. – placeybordeaux