这是来自 GOPL 的一个例子——“表达式 x[i] 和 x + 'A' - 'a' 每个都指代来自外部块的 x 声明;我们稍后会解释这一点。”解释永远不会到来。为什么 x[i] 指的是外部作用域中的 x?一旦您在内部块中重新声明 x,它就会遮住外部块中的 x。为什么这样做?package mainimport "fmt"func main() { x := "hello!" for i := 0; i < len(x); i++ { x := x[i] if x != '!' { x := x + 'A' - 'a' fmt.Printf("%c", x) } }}http://play.golang.org/p/NQxfkTeGzA
1 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
:=
运算符创建一个新变量并为其分配右侧值。
在 for 循环的第一次迭代中,在 step 中x := x[i]
,唯一x
右侧看到的是x
step 中定义的x := "hello!"
。就右手边所见x
,尚未重新声明。
一旦您在内部块中重新声明 x ..
它是目前还没有。它仅在 之后重新声明x := x[i]
。
在迭代结束时, newx
的作用域结束。它不会在新的迭代中重用。
当新的迭代发生时,它会再次发生同样的事情。
- 1 回答
- 0 关注
- 150 浏览
添加回答
举报
0/150
提交
取消