在julia 1.0.0中,我得到以下for循环作用域行为:
julia> counts = 0
0
julia> for i in 1:10
counts += 1
end
ERROR: UndefVarError: counts not defined
我发现解决方案是在循环中创建counts
变量.global
for
julia> for i in 1:10
global counts += 1
end
julia> counts
10
然而,作为朱莉娅的新手,这种行为几乎让我退出了语言,因为它似乎与其他语言有很大不同.
现在我看到了上面的解决方案,我想知道这对于开始julia用户是否直观.这对我来说并不直观,尽管我终于能够在很长一段时间后解决它.
这是令人困惑的部分.我认为在初始化时创建变量global会解决问题.它不是:
julia> global c = 0
julia> for i in 1:10
c += 1
end
ERROR: UndefVarError: c not defined
c
上面的全局范围会流入for循环似乎很自然,但for循环的第一次初始化c
显然会创建一个不同的for循环局部c
.
这对经验丰富的julia开发者有意义吗?
我认为有一致认为,对于交互式使用,这种行为并不是最优的,很可能会很快改变到REPL中的预期行为,IJulia等.你可以在这里找到讨论:https://github.com/JuliaLang/julia/issues/28789
但请注意,一旦将其包装到本地范围(例如函数或let
块)中,一切都按预期工作.
请参阅我的答案:Julia中的变量范围,以获取更多信息/参考资料.