4

假设我main在单个文件“main.jl”中有一些 Julia 模块

module main

export tester,add
a=1

function hi()
    return "hi"
end

function tester()
    return hi()
end

function add()
    return a+1
end
    
end

现在假设我想把它分成两个文件,其中一个包括辅助函数hi(),比如:

module auxillary

function hi()
    return "hi"
end
end

并用于include在主文件中复制/粘贴 auxillary.jl 中的函数:

module main

include("auxillary.jl")
export add,tester

a=1

function tester()
    return hi()
end
function add()
    return a+1
end

end

然后从 main 调用tester()会给出错误“hi()未定义”。是include不够还是我还得用using

其次,假设我想移动add()到 auxillary.jl,但将全局变量保留a在 main.jl 中。然后我add()将从 main.jl调用。我该怎么做?

4

1 回答 1

4

您需要的代码布局如下:

module MyModule

# this is equal to do doing `include` here
module Auxillary
function hi()
   return "hi"
end
function add()
   return Main.MyModule.a+1
end
end

export add,tester

using Main.MyModule.Auxillary

a=1
function tester()
   return Auxillary.hi()
end

end

这可以运行为:

julia> using Main.MyModule

julia> MyModule.Auxillary.add()
2

julia> MyModule.tester()
"hi"

解释

每个都module创建它的命名空间,所以让它运行的技巧是正确地指出你需要哪个命名空间。当此代码在控制台中运行时,modeleMyModule成为 的子模块,Main并且AuxillaryMyModule.

于 2021-07-18T23:13:02.757 回答