1 回答

TA贡献1875条经验 获得超3个赞
这就是 Go 设计者避免语法糖的原因;当您期望的糖分比实际的多时,它会导致混淆。你在这里看到 Go 中的两种语法糖;展开切片以传递给可变参数函数,并将多个返回值传递给函数。
此处记录了将切片分解为可变参数函数:
如果最后一个参数可分配给切片类型 []T,如果参数后跟 ...,则它可以作为 ...T 参数的值不变地传递。在这种情况下,不会创建新的切片。
fmt.Println
是具有单个可变参数的函数。这意味着您可以将单个项目传递给它,也可以将单个项目传递给已声明的切片并...
附加爆炸运算符,在这种情况下,该切片将不加改变地传递。它不能是切片文字,也不能跟随其他参数,以便使用此助手。
作为一种特殊情况,如果函数或方法 g 的返回值在数量上相等并且可单独分配给另一个函数或方法 f 的参数,则调用 f(g(parameters_of_g)) 将在绑定返回值后调用 f g 到 f 的参数的顺序。f 的调用除 g 的调用外不得包含任何参数,并且 g 必须至少有一个返回值。如果 f 有一个 final ... 参数,它会被分配 g 的返回值,这些返回值在分配常规参数后仍然存在。
同样,因为fmt.Println
有一个单一的可变参数,您不能混合和匹配传递特定值与使用上述语法糖将多值返回直接传递给另一个函数的参数。
正如 Peter 所说,“Q3 是一个切片文字,它根本不支持可变“参数”(因为值不是参数)。” 上面用于将多个返回值传递给函数的语法糖不适用于切片文字,因为它根本不是函数。
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报