for循环语句中变量问题

如下代码:

x = 0
for i = 1: 5
    x = x + i
end
x

报错:
UndefVarError: x not defined

Stacktrace:
[1] top-level scope at ./In[101]:3 [inlined]
[2] top-level scope at ./none:0
是因为Julia把for语句内的变量都当成local变量了吗?我在Julia的文档里发现了这个:


所以说只要在for语句内,不把变量指定为global都会认定为local吗?(有点反人类啊……

image 我用的 0.6.4,没有任何问题

我用的版本是1.0,没试过0.6

1.0的scope规则改了。说是这样更加统一。

在module的global作用域下是有这个问题。
但在一个局部作用域中你的代码是正确的:

fn(x) = 
  begin 
     for i = 1:5 
         x = x + 1 
    end 
    x
  end
fn(5) === 10

So 并不是那么反人类(

这个行为你记住就好,其原始目的是为了实现正确的作用域,也就是在for, while, let中绑定的新符号不会污染外部符号。

3 个赞
从0.6到1.0,变化还是蛮大的
julia> x = 0
0

julia> let
       global x
       for i = 1: 5
           x = x + i
       end
       end

julia> x
15

julia> i = 1
1

julia> let
       global x, i
       for outer i = 1: 5
           x = x + i
       end
       end

julia> x
30

julia> i
5
1 个赞

X-ref: