当一个函数在 Golang 中返回多个变量时,变量的作用域是什么?在附加的代码中,我无法弄清楚 b 的范围。package mainimport ( "fmt")func addMulti(x, y int) (int, int) { return (x + y), (x * y)}func main() { //what is the scope of the b variable here? a, b := addMulti(1, 2) fmt.Printf("%d %d\n", a, b) //what is the scope of the b variable here? c, b := addMulti(3, 4) fmt.Printf("%d %d\n", c, b)}
3 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
我们不是在谈论函数返回值的范围,而是在谈论您将返回值分配给的变量的范围。
在您的情况下,变量的范围b
是函数体,从您声明它的点开始。
首先你在这一行做:
a, b := addMulti(1, 2)
但是你在这一行使用了另一个短变量声明:
c, b := addMulti(3, 4)
这 - 因为b
已经声明 - 只是为其分配一个新值。b
将在范围内,直到您的main()
功能结束。引用 Go 语言规范:
与常规变量声明不同,短变量声明可以重新声明变量,前提是它们最初在同一块中以相同类型声明,并且至少有一个非空变量是新的。因此,重新声明只能出现在多变量短声明中。重新声明不会引入新变量;它只是为原始值分配一个新值。
开心每一天1111
TA贡献1836条经验 获得超13个赞
b 变量的范围是main.main()
. 在第二次赋值中, c, b := addMulti(3, 4)
您引入了新变量 c,并分配了在第一次赋值中引入的变量 b。如果您将第二个分配更改为a, b := addMulti(3, 4)
与第一个相同,则它不想编译。
- 3 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消