Julia中的全局作用域

10

我在这里有一段 Julia 代码:

i = 1
while true
    if i == 10
        break
    end
    
    global i += 1 #A
    
    for k = 1:1
        println(i) #B
    end
end
println(i)
我的问题是为什么在while循环内部需要global i += 1 #A,但for循环中的println(i) #B没有要求任何全局声明?是否只有在修改变量时才需要全局声明?在while声明后的if i == 10语句正在使用全局作用域。
1个回答

13
在 Julia 中,循环体与函数体一样引入本地作用域。如果你对尚未声明为本地变量或全局变量的变量进行赋值,则默认它是一个新的本地变量。这两个事实结合起来意味着在循环内部对 i 进行赋值会导致它成为一个新的本地变量。另一方面,如果你没有对它进行赋值,只是访问它,那么它必须是某个外部作用域(本地或全局)的变量,在这种情况下则为全局变量。
关于第二个问题:给定作用域中的变量只能有一个含义,即它要么是本地变量,要么是全局变量。它不能在循环体的不同部分中既是本地的又是全局的(除非存在内部嵌套作用域,但那是不同的作用域区域)。如果它在任何地方被声明为全局变量,则在该声明之前和之后都将是全局变量。如果它是本地变量,则它在任何地方都是本地变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接