Julia 中的全局范围

global scope in Julia

我这里有一段 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 语句使用全局范围。

在 Julia 中,循环体引入了与函数体相同的局部作用域。如果您分配给一个还不是局部变量或明确声明为全局变量的变量,那么默认情况下它是一个新的局部变量。结合这两个事实意味着在循环内分配给 i 会导致它成为一个新的局部变量。另一方面,如果您不分配给它而只访问它,那么它必须是来自某个外部作用域的变量,本地或全局,但在这种情况下是全局的。

关于第二个问题:给定范围内的变量只能有一个含义——要么是局部的,要么是全局的。它不能在循环体的一部分是局部的,而在另一部分是全局的(除非有一个内部嵌套作用域,但那是一个不同的作用域区域)。如果它在任何地方都被声明为全局的,那么它在该声明之前和之后的任何地方都是全局的。如果它是本地的,那么它到处都是本地的。