假设我有一个像下面可以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) } 在我不能这样的情况下 使用可变参数对吗? –