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会使其成为一个新的局部。另一方面,如果你不分配给它,只访问它,那么它必须是来自某个外部范围的变量,本地或全局的,但在本例中是全局的。

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

相关内容

  • 没有找到相关文章

最新更新