如下代码:
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吗?(有点反人类啊……
在module的global作用域下是有这个问题。
但在一个局部作用域中你的代码是正确的:
fn(x) =
begin
for i = 1:5
x = x + 1
end
x
end
fn(5) === 10
So 并不是那么反人类(
这个行为你记住就好,其原始目的是为了实现正确的作用域,也就是在for, while, let中绑定的新符号不会污染外部符号。
3 个赞
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 个赞