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 按预期工作。我该如何理解这一点?数组不是变量?有人可以向我解释一下吗?
这个问题本质上是 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)。