请在此处提供的信息供您参考: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
答案 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