【发布时间】:2019-07-08 13:48:17
【问题描述】:
有没有办法在 golang 中采用可变参数的函数中使用 splatted 参数和简单参数(定义如下)的组合?如果没有,是否有一个近似此功能的著名成语?如果可能,是否有不需要重复类型名称的近似此功能的成语?
假设我有一个带有...T 类型的 golang 变量参数的函数。
您在通话现场的选择似乎仅限于:
- 多个简单参数,每个类型为
T,即f(…… x1, x2, x3 ……) -
[]T类型的单个 splatted 参数,即f(…… ...xs ……)
在 Python 等其他一些语言中,可以捕获简单参数和带有可变参数的 splatted 参数的组合:
$ python
>>> def foo(*args): return args
...
>>> foo(1, 2, *[3, 4])
(1, 2, 3, 4)
但是,同样的事情在 go 中似乎不起作用。
// splat.go
package main
import "os"
import "fmt"
func write(args ...string) {
for _, item := range args {
fmt.Printf("%s\n", item)
}
}
func main() {
write("foobarbaz", os.Args[1:]...)
}
从错误消息中可以清楚地看出,splatted 参数和简单参数没有映射到同一个参数。
$ go run splat.go
# command-line-arguments
./splat.go:14: too many arguments in call to write
【问题讨论】:
标签: go