SO 上还有与此问题相关的其他问题,但我认为我尝试了推荐的解决方案,但没有成功。
因此,本着我学习 Julia 的初衷,我尝试在本地创建一个模块。我的模块的文件夹结构如下:
- TrimmedGrassmanAvwerage/
- src/
- TrimmedGrassmanAverage.jl
- Utils/
- dummy.jl
dummy.jl
的内容很简单:
function dummy(x)
x + oneunit(x)
end
同样,TrimmedGrassmanAverage
的内容为:
module TrimmedGrassmanAverage
export Utils,
dummy
include("Utils/dummy.jl")
end
现在,在我的 REPL 中我执行以下操作:
julia> include("TrimmedGrassmanAverage/src/TrimmedGrassmanAverage.jl")
这将返回:
Main.TrimmedGrassmanAverage
现在我做到了:
using TrimmedGrassmanAverage
这会返回错误:
ERROR: ArgumentError: Package TrimmedGrassmanAverage not found in current path:
- Run `Pkg.add("TrimmedGrassmanAverage")` to install the TrimmedGrassmanAverage package.
我认为执行 `include("...") 会将包放入路径中,julia 应该能够找到它。然而,显然还缺少一些步骤。
编辑
但是,我可以做到:
using Main.TrimmedGrassmanAverage
然后我可以调用:
TrimmedGrassmanAverage.dummy(10);
我不确定为什么必须添加 Main
命名空间,以及为什么我不能在没有 Trimmed...
的情况下调用 dummy
因为我导出了虚拟函数。
最佳答案
如何加载模块。使用以下任一方法:
using Main.TrimmedGrassmanAverage
或
using .TrimmedGrassmanAverage
这将具有相同的效果。原因是当您运行 include
时,您的模块会在 Main
模块范围内定义。 using Something
确实会查找包(并且您仅在文件中定义了模块)。包查找由 LOAD_PATH
和 DEPOT_PATH
变量控制(请参阅 https://docs.julialang.org/en/latest/stdlib/Pkg/#Glossary-1 )。
编辑:实际上似乎 dummy
在 Julia 1.0 上正确导出
julia> module TrimmedGrassmanAverage
export Utils,
dummy
function dummy(x)
x + oneunit(x)
end
end
Main.TrimmedGrassmanAverage
julia> using Main.TrimmedGrassmanAverage
julia> dummy(10)
11
至少在我的 Julia 身上。
对代码的旁注是,模块中未定义 Utils
,并且您尝试导出它(请注意,在 Julia 中,从何处获取文件并不重要include
- 此函数的工作方式类似于复制粘贴代码)。
关于julia - 从 Julia 的本地目录加载模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52519625/