Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 戈朗阴影行为解释_Go - Fatal编程技术网

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中的标识符,并在最内层的末尾结束 包含块

突出显示的文本是我在第一次阅读中遗漏的操作原理。我有罪。:-)