我在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
会使其成为一个新的局部。另一方面,如果你不分配给它,只访问它,那么它必须是来自某个外部范围的变量,本地或全局的,但在本例中是全局的。
关于第二个问题:给定范围内的变量只能有一个含义——它要么是局部的,要么是全局的。它不能在循环体的一个部分中是局部的,而在另一个部分是全局的(除非有一个内部嵌套的范围,但那是一个不同的范围区域(。如果它在任何地方被宣布为全球性的,那么无论在声明之前还是之后,它都是全球性的。如果它是本地的,那么它在任何地方都是本地的。