朱莉娅的本地范围

时间:2020-06-28 06:31:55

标签: arrays variables julia scopes

我知道for循环现在在Julia中是本地的。但是有些我不明白。请考虑以下两个示例。

示例1

a = 0
for i = 1:3
   a += 1
end

示例2

a = [0]
for i = 1:3
   a[1] += 1
end

示例1抛出一条错误消息,据我所知。但是示例2可以正常工作。我应该怎么理解?数组不是变量吗?有人可以向我解释吗?

1 个答案:

答案 0 :(得分:3)

这个问题本质上是Julia scoping: why does this function modify a global variable?的重复,在这里详细讨论,不同之处在于a = ...是赋值操作(更改变量a的绑定)和{ {1}}是一个a[1] = ...操作(更改集合中包含的值)。另请参见Creating copies in Julia with = operator

我并没有将其标记为重复项,因为在您的情况下,第一个示例在Julia 1.4.2下的REPL中失败,但是一旦发布,它就可以在Julia 1.5下工作,请参见https://github.com/JuliaLang/julia/blob/v1.5.0-rc1/NEWS.md

交互式REPL现在对顶层表达式使用“软作用域”:作用域块(例如for循环)内的赋值会自动分配给全局变量(如果已定义)。这与Julia版本0.6和更低版本以及IJulia的行为匹配。请注意,这只会影响以交互方式键入或直接粘贴到默认REPL(#28789,#33864)中的表达式。