在 Julia 中的模块之间共享全局变量



此处提供的信息: 如何定义稍后在 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

相关内容

  • 没有找到相关文章

最新更新