假設我有一個像下面可以golang採取與未知數量的參數的函數作爲參數傳遞給另一個函數
package main
import "fmt"
func main() {
Execute(1,One)
// Execute(2,Two)
// Execute(3,Three)
}
type Executable func(int)
func Execute(noOfArgs int, fn Executable){
switch noOfArgs {
case 1 : fn(1)
// case 2 : fn(1,2)
// case 3 : fn("1",2,3)
}
}
func One(n int) {
fmt.Println("Foo = ",n)
}
func Two(n1,n2 int) {
fmt.Println("Foo = ",n1+n2)
}
func Three(n1 string,n2,n3 int) {
fmt.Println("Foo = ",n1+n2+n3)
}
而且我想使Execute
功能作爲一個通用的一個可接收功能的程序具有不同類型參數的數量不同,Executable
的類型應該是什麼?
換句話說,如果我取消註釋上述程序中的註釋行,它會中斷。我應該對線路type Executable func(int)
做出什麼修改才能使其工作?
PS:請儘量給予而不是給一個解決方法,我提到
編輯確切的情況一個通用的答案 - 這不是this問題重複。 我不是在尋找擴展參數。我會有不同類型的參數和不同數量的參數
編輯: - 我會更清楚地解釋我的情況。
我有一個BDD樣式的測試執行程序,它分析一行文本並執行與它相關的函數,並帶有適當的參數。
如: -
說 「問候語」,以 「人」
和相關功能
func SayGreeting(greeting, person string) {
fmt.Println(greeting, ", ", person)
}
另一條線它說
添加< 2>,< 3>和< 4>
和相關聯的功能
func AddNum(n1, n2, n3 int) {
sum := n1 + n2 + n3
fmt.Println("Sum is : ", sum)
}
我有一種機制來掃描所有的功能,並將其添加到地圖,具有相關聯的場景。我的程序知道執行哪個函數,它的參數個數和參數。
我的問題是,我如何使地圖通用,以便我可以存儲具有不同數量/類型的參數的不同功能。
你有'反射'和'接口'標籤,但這兩個主題都不在你的問題中。 「通用」答案是使用可變參數函數。你能解釋爲什麼你不想使用可變參數函數嗎? 'func Three'無效,所以我不確定你想通過混合類型來完成什麼。 – JimB
['類型可執行函數(... int)'](https://golang.org/ref/spec#Function_types)? – kostix
@JimB假設我的函數三是 FUNC三(N1字符串,布爾N2,N3 INT){ fmt.Println( 「富=」,N1,N2,N3) } 在我不能這樣的情況下 使用可變參數對嗎? –