julia - 从 Julia 的本地目录加载模块

标签 julia

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_PATHDEPOT_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/

相关文章:

julia - 澄清线程使用和进程的好处

macros - 如何将变量值传递给 julia 中的宏?

Julia 中 for 循环的性能

julia - 将 lambda 向量传递给 Poisson(),或惯用函数组合指南

python - 将 Julia 添加到 PATH 导致其他人被从 PATH 中剔除 ||苹果电脑

parallel-processing - 如何获取 Julia 中辅助工作人员的源目录?

matplotlib - 当 DataFrame-Column 缺少值时 PyPlot 会抛出错误

julia,线性代数,是否有一个函数可以找到与给定向量正交的所有向量?

loops - 循环 JuMP 约束中的变量子集

multidimensional-array - 选择任意维度进行过滤?