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
会导致它成为一个新的局部变量。另一方面,如果您不分配给它而只访问它,那么它必须是来自某个外部作用域的变量,本地或全局,但在这种情况下是全局的。
关于第二个问题:给定范围内的变量只能有一个含义——要么是局部的,要么是全局的。它不能在循环体的一部分是局部的,而在另一部分是全局的(除非有一个内部嵌套作用域,但那是一个不同的作用域区域)。如果它在任何地方都被声明为全局的,那么它在该声明之前和之后的任何地方都是全局的。如果它是本地的,那么它到处都是本地的。
我这里有一段 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
会导致它成为一个新的局部变量。另一方面,如果您不分配给它而只访问它,那么它必须是来自某个外部作用域的变量,本地或全局,但在这种情况下是全局的。
关于第二个问题:给定范围内的变量只能有一个含义——要么是局部的,要么是全局的。它不能在循环体的一部分是局部的,而在另一部分是全局的(除非有一个内部嵌套作用域,但那是一个不同的作用域区域)。如果它在任何地方都被声明为全局的,那么它在该声明之前和之后的任何地方都是全局的。如果它是本地的,那么它到处都是本地的。