在Julia中跨模块共享全局变量

时间:2019-09-14 14:49:47

标签: global-variables julia

请在此处提供的信息供您参考:How to define global variables to be shared later in Julia我继续在Julia中处理全局变量。

文件: global.jl

module Global

    export data

    data = zeros(Int32, 20, 12, 31, 24, 60, 5);

end

文件: main.jl

# MAIN PROGRAM

# INCLUDE GLOBAL
include("global.jl")
import .Global

println(">> Main Before include test.jl")
println(">> ", Global.data[ 14, 1, 15, 18, 1, 1])

include("test.jl")

println(">> Main After include test.jl")
println(">> ", Global.data[ 14, 1, 15, 18, 1, 1])

文件: test.jl

module Test

        include("global.jl")
        import .Global

        println("   >> Inside Test")
        println("     ", Global.data[ 14, 1, 15, 18, 1, 1])
        Global.data[ 14, 1, 15, 18, 1, 1] = 123456
        println("     ", Global.data[ 14, 1, 15, 18, 1, 1])

end

我希望模块Test可以修改全局数组data,因此稍后将由main.jl反映出来。我显然仍然缺少一些东西,因为这是输出:

$ /usr/local/julia-1.2.0/bin/julia main.jl
>> Main Before include test.jl
>> 0
   >> Inside Test
     0
     123456
>> Main After include test.jl
>> 0

1 个答案:

答案 0 :(得分:2)

您需要了解的关键问题是include的工作原理类似于复制粘贴。

在代码中,您两次定义模块Global。一次进入Main模块,一次进入Test模块。这两个模块具有相同的代码,但是是分开的(后者嵌套在Test模块中)。参见:

julia> Main.Test.Global.data[ 14, 1, 15, 18, 1, 1]
123456

julia> Main.Global.data[ 14, 1, 15, 18, 1, 1]
0

这是您应该定义Test模块以重用先前定义的Global模块的方式:

module Test
        import ..Global
        println("   >> Inside Test")
        println("     ", Global.data[ 14, 1, 15, 18, 1, 1])
        Global.data[ 14, 1, 15, 18, 1, 1] = 123456
        println("     ", Global.data[ 14, 1, 15, 18, 1, 1])
end