Golang 解包可变参数

如何...在 golang 中解压可变参数:


func run(a, b string, list ...int) {

}


func call(list ...int) {

    run(x, y, list...) // use "list..." is not allowed 

}


func main() {

    a := []int{1, 2, 3}

    call(a...)

}

为什么这是非法的?正如我所知,list参数是一个切片,可以由....


繁星淼淼
浏览 224回答 3
3回答

桃花长相依

解包可变参数对于你的例子,package mainimport "fmt"func run(a, b string, list ...int) {    fmt.Println(list)    for i, e := range list {        fmt.Println(i, e)    }}func call(list ...int) {    fmt.Println(list)    var x, y string    run(x, y, list...) // use "list..." is allowed}func main() {    a := []int{1, 2, 3}    fmt.Println(a)    call(a...)}游乐场: https: //play.golang.org/p/NI0L-nVVUxm输出:[1 2 3][1 2 3][1 2 3]0 11 22 3

LEATH

只有当您传递给可变参数函数的切片代替可变参数时,可变参数才能被扩展。出于这个原因,您不能在单个可变参数中组合单个参数和扩展切片。当您使用扩展时,该函数接收“扩展”切片本身作为其可变参数 - 它是语义糖,可能会令人困惑,因为这些调用不等效:foo := []string{"alpha","beta"}bar(foo...) // bar receives the foo slice as its variadic parameterbar(foo[0], foo[1]) // bar receives a new slice with these elements copied to it您可以在规范中找到更多详细信息,尽管他们使用的示例使一些解释不清楚,因为他们的示例可变参数函数具有多个参数。以“如果最终参数是可赋值的”开头的部分指的是“最终参数”,而不是一般的“可变参数函数的最终参数”意义上的,而是特定的“示例中函数的最终参数”意义上的。

holdtom

你没有声明变量 x 和 y。创建它们或仅使用引号。 https://play.golang.org/p/gZnMALrM4Uhpackage mainimport (    "fmt")func run(a, b string, list ...int) {fmt.Println(list)}func call(list ...int) {    run("x", "y", list...) // ok}func main() {    a := []int{1, 2, 3}    call(a...)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go