6
基本上,如果我有一個任意函數的切片或數組,我該如何選擇只返回int的數據,或者只選擇那些使用int的數據?從Golang中的函數列表中選擇一個函數
我想我需要使用反射包,但只是閱讀文檔並沒有真正幫助我找出如何做到這一點。
基本上,如果我有一個任意函數的切片或數組,我該如何選擇只返回int的數據,或者只選擇那些使用int的數據?從Golang中的函數列表中選擇一個函數
我想我需要使用反射包,但只是閱讀文檔並沒有真正幫助我找出如何做到這一點。
此程序將打印功能服用int
作爲參數或返回一個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)
}
}
}
我認爲代碼是自解釋性
看看[該線程上golang堅果](HTTPS:/ /groups.google.com/forum/?fromgroups=#!topic/golang-nuts/uGTYQzJ9Cfs)幫助 –
可以解釋您嘗試解決的問題,而不是您嘗試實施的解決方案嗎?在Go中可能有更簡單的方法。 Go的嘗試方式非常尷尬。根據你想要做的事情,dystroy的建議可能是你唯一的選擇,但是你有很好的機會可以做一些更容易混淆的事情。 – jorelli
不,我試圖做的事實上令人困惑。考慮創建一個圖,其中每個節點是一個函數。我想在給定任意函數列表的情況下搜索圖的空間。這個想法是,它可以用作函數逼近器ala機器學習。我相信dystroy的解決方案就是我想要的。如果你想建議一種更好的語言,我願意接受。我聽說C#可以做到。 – placeybordeaux