Go 戈朗阴影行为解释
在这个片段中Go 戈朗阴影行为解释,go,Go,在这个片段中 list := []string{"a", "b", "c"} for { list := repeat(list) ... func repeat(list []string) []string { ... 显然,用作repeat()函数参数的list变量是外部的带阴影的列表变量。现在我的问题是,一个围棋语言律师如何解释这种行为?乍一看,我认为内部list变量的声明应该在repeat(list)表达式求值之前。在本例中: list :=
list := []string{"a", "b", "c"}
for {
list := repeat(list)
...
func repeat(list []string) []string {
...
显然,用作repeat()
函数参数的list
变量是外部的带阴影的列表变量。现在我的问题是,一个围棋语言律师如何解释这种行为?乍一看,我认为内部list变量的声明应该在repeat(list)
表达式求值之前。在本例中:
list := []string{"a", "b", "c"}
for {
list := repeat(list)
第二个列表
在for块中隐藏第一个,并且不改变外部列表
变量
由于
repeat
的参数是在声明和分配内部列表之前计算的,repeat
从外部列表中接收值
这是一个棘手的问题。我想要的答案基本上是在声明中:
list := repeat(list)
在语句结束之前,内部列表变量不在范围内,而外部列表变量在范围内。以下是规范中必须说明的内容:
Go使用块进行词汇范围划分:
预声明标识符的作用域是universe块。范围
表示常量、类型、变量或函数的标识符(但
在顶层(任何函数外部)声明的not方法是
包块。导入包的包名称的范围为
包含导入声明的文件的文件块。这个
表示方法接收器、函数参数的标识符的范围,
或结果变量是函数体常量或变量的范围
函数中声明的变量标识符从
ConstSpec或VarSpec(ShortVarDecl表示短变量
声明)并在最里面的包含块的末尾结束。
函数中声明的类型标识符的作用域从
TypeSpec中的标识符,并在最内层的末尾结束
包含块
突出显示的文本是我在第一次阅读中遗漏的操作原理。我有罪。:-)