使用for循环在julia 1.0.0中确定范围对初学者有意义吗?

Jul*_*ner 11 scope global-variables julia

在julia 1.0.0中,我得到以下for循环作用域行为:

julia> counts = 0
0
julia> for i in 1:10
       counts += 1
   end
ERROR: UndefVarError: counts not defined
Run Code Online (Sandbox Code Playgroud)

我发现解决方案是在循环中创建counts变量.globalfor

julia> for i in 1:10
           global counts += 1
       end
julia> counts
10
Run Code Online (Sandbox Code Playgroud)

然而,作为朱莉娅的新手,这种行为几乎让我退出了语言,因为它似乎与其他语言有很大不同.

现在我看到了上面的解决方案,我想知道这对于开始julia用户是否直观.这对我来说并不直观,尽管我终于能够在很长一段时间后解决它.

这是令人困惑的部分.我认为在初始化时创建变量global会解决问题.它不是:

julia> global c = 0
julia> for i in 1:10
           c += 1
       end
ERROR: UndefVarError: c not defined
Run Code Online (Sandbox Code Playgroud)

c上面的全局范围会流入for循环似乎很自然,但for循环的第一次初始化c显然会创建一个不同的for循环局部c.

这对经验丰富的julia开发者有意义吗?

crs*_*nbr 13

我认为有一致认为,对于交互式使用,这种行为并不是最优的,很可能会很快改变到REPL中的预期行为,IJulia等.你可以在这里找到讨论:https://github.com/JuliaLang/julia/issues/28789

但请注意,一旦将其包装到本地范围(例如函数或let块)中,一切都按预期工作.

请参阅我的答案:Julia中的变量范围,以获取更多信息/参考资料.