julia - 在 Julia 中使用 include 和全局变量

标签 julia

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

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
然后拨打 tester()从 main 给出错误“hi() 未定义”。是 include不够用还是我还得用using ?
其次,假设我想移动 add()到 auxillary.jl,但保留全局变量 a在 main.jl 中。然后我会调用add()来自 main.jl。我该怎么做?

最佳答案

您需要的代码布局如下:

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创建它的命名空间,所以让它运行的技巧是正确指出你需要哪个命名空间。
当此代码在控制台中运行时,modele MyModule成为 Main 的子模块和 AuxillaryMyModule 的子模块.

关于julia - 在 Julia 中使用 include 和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68433384/

相关文章:

Julia `@kwdef` -- 有 "extra constructors"

Julia 中长度有限的排列

julia - 提取字符串、计数并将它们转置为数据框中的列

performance - Julia 1.0 中的缓慢(重复)矩阵乘法

linux - 在 Julia (Linux) 中获取当前用户名

Julia:如何将函数的参数类型定义为元组数组?

dataframe - Julia:将 DataFrame 传递给函数会创建一个指向 DataFrame 的指针吗?

julia - 如何在 Julia 中执行交叉验证(K 折)?

y=1/x 的 Julia 方法错误

polymorphism - 从抽象类型访问字段时,julia 类型不稳定