在 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 的新手,这种行为几乎让我放弃了这门语言,因为它看起来与其他语言非常不同。
现在我看到了上面的解决方案,我想知道这对初学者 julia 用户来说是否直观。 这对我来说并不直观,尽管经过相当长的时间我终于能够解决它。
这是令人困惑的部分。 我认为在初始化时使变量全局化可以解决问题。 它不会:
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 中的变量范围以获取更多信息/参考。