去变量范围和阴影

时间:2015-11-01 02:09:31

标签: go

这是GOPL的一个例子 - "表达式x [i]和x +' A' - ' a'每个都引用外部块的x声明;我们马上解释一下。"

解释永远不会到来。为什么x [i]指的是外部范围中的x?只要在内部块中重新声明x,它就应该遮蔽外部块中的x。为什么这样做?

package main

import "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 个答案:

答案 0 :(得分:4)

:=运算符创建一个新变量并为其指定右侧值。

在for循环的第一次迭代中,在步骤x := x[i]中,右侧看到的唯一x是步骤x中定义的x := "hello!"。就右侧而言,x尚未重新宣布。

  

一旦你在内部区域重新声明x ..

还没有。它仅在x := x[i]之后重新宣布。

在迭代结束时,新x的范围结束。它不会在新的迭代中重复使用。

当一个新的迭代发生时,它会再次发生同样的事情。