去可变范围和阴影

这是来自 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


明月笑刀无情
浏览 151回答 1
1回答

凤凰求蛊

:=&nbsp;运算符创建一个新变量并为其分配右侧值。在 for 循环的第一次迭代中,在 step 中x := x[i],唯一x右侧看到的是xstep 中定义的x := "hello!"。就右手边所见x,尚未重新声明。一旦您在内部块中重新声明 x ..它是目前还没有。它仅在 之后重新声明x := x[i]。在迭代结束时, newx的作用域结束。它不会在新的迭代中重用。当新的迭代发生时,它会再次发生同样的事情。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go