go 变量作用域和阴影

2024-03-27

这是 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 http://play.golang.org/p/NQxfkTeGzA


:=运算符创建一个新变量并将右侧值分配给它。

在 for 循环的第一次迭代中,在步骤x := x[i], 唯一的x右手边看到的是x步骤中定义的x := "hello!"。就右手边所见x尚未重新声明。

一旦您在内部块中重新声明 x ..

It is还没有。仅在之后重新声明x := x[i].

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go 变量作用域和阴影 的相关文章

随机推荐