2012-09-17 79 views
6

基本上,如果我有一個任意函數的切片或數組,我該如何選擇只返回int的數據,或者只選擇那些使用int的數據?從Golang中的函數列表中選擇一個函數

我想我需要使用反射包,但只是閱讀文檔並沒有真正幫助我找出如何做到這一點。

+0

看看[該線程上golang堅果](HTTPS:/ /groups.google.com/forum/?fromgroups=#!topic/golang-nuts/uGTYQzJ9Cfs)幫助 –

+1

可以解釋您嘗試解決的問題,而不是您嘗試實施的解決方案嗎?在Go中可能有更簡單的方法。 Go的嘗試方式非常尷尬。根據你想要做的事情,dystroy的建議可能是你唯一的選擇,但是你有很好的機會可以做一些更容易混淆的事情。 – jorelli

+0

不,我試圖做的事實上令人困惑。考慮創建一個圖,其中每個節點是一個函數。我想在給定任意函數列表的情況下搜索圖的空間。這個想法是,它可以用作函數逼近器ala機器學習。我相信dystroy的解決方案就是我想要的。如果你想建議一種更好的語言,我願意接受。我聽說C#可以做到。 – placeybordeaux

回答

11

此程序將打印功能服用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) 
     } 
    } 
} 

我認爲代碼是自解釋性

相關問題