此处提供的信息: 如何定义稍后在 Julia 中共享的全局变量 我一直在 Julia 中研究全局变量。
文件:全球.jl
module Global
export data
data = zeros(Int32, 20, 12, 31, 24, 60, 5);
end
文件:主.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])
文件:测试.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
您需要了解的关键问题是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