Julia 中的局部作用域

SJ *_*Jun 8 arrays variables scopes julia

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

示例 1

a = 0
for i = 1:3
   a += 1
end
Run Code Online (Sandbox Code Playgroud)

示例 2

a = [0]
for i = 1:3
   a[1] += 1
end
Run Code Online (Sandbox Code Playgroud)

示例 1 抛出错误消息,我理解。但是示例 2 按预期工作。我该如何理解这一点?数组不是变量?有人可以向我解释一下吗?

Bog*_*ski 4

这个问题本质上是 Julia 作用域的重复:为什么这个函数会修改全局变量?,其中详细讨论了区别在于 是a = ...赋值操作(更改变量的绑定a)和a[1] = ...setindex!操作(更改集合中包含的值)。另请参阅在 Julia 中使用 = 运算符创建副本

我不会将其标记为重复项,只是因为在您的情况下,第一个示例在 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)。