Julia 的全局范围

Vin*_*nod 10 global-variables 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)
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么global i += 1 #Awhile 循环内需要,但println(i) #Bfor 循环内不需要任何全局声明?

只有修改变量才需要全局声明吗?while 声明之后的语句if i == 10使用全局范围。

Ste*_*ski 13

在 Julia 中,循环体与函数体一样引入局部作用域。如果您分配给\xe2\x80\x99 已经不是局部变量或显式声明为全局变量的变量,则默认情况下它是一个新的局部变量。结合这两个事实意味着分配给i循环内部会导致它成为一个新的局部变量。另一方面,如果您不\xe2\x80\x99t 分配给它并且仅访问它,那么它必须是来自某个外部作用域的变量,本地或全局的,但在本例中是全局的。

\n

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

\n