在Julia中未定义全局变量

6

之前有一个类似的问题被问到这里,但是根据那个问题的答案和Julia手册,以下.jl脚本应该可以工作。

global myVar = spzeros(10,1);
myVar[3] = 1;

function test_base()
  test1();
end

function test1()
  myVar = [ i > 0 ? 2 : 0 for i in myVar] #doesn't work
end

我明确地声明了一个全局变量,然后试图在函数内部修改它。但是当我尝试运行函数test1()时,它显示该变量未定义。

julia> VERSION
v"0.3.5"

julia> include("test.jl")
test1 (generic function with 1 method)

julia> test_base()
ERROR: myVar not defined
 in test1 at /home/clifton/Julia/ca-1/test.jl:9
 in test_base at /home/clifton/Julia/ca-1/test.jl:5

我尝试了不同的方法,如果我只是在test1()中访问变量,像print(myVar);,它确实可以工作。有人知道我做错了什么吗?

1个回答

12
我认为你需要在需要访问全局变量的函数内部放置global关键字。
下面是我的解决方案:
myVar = spzeros(10,1);
myVar[3] = 1;

function test_base()
    test1();
end

function test1()
    global myVar
    myVar = [ i > 0 ? 2 : 0 for i in myVar] #doesn't work
end

输出:

julia> include("test.jl")
test1 (generic function with 1 method)

julia> test_base()
10-element Array{Int64,1}:
 0
 0
 2
 0
 0
 0
 0
 0
 0
 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接