从Julia

时间:2018-09-26 14:03:40

标签: julia

关于此问题,还有其他问题,但我想我尝试了推荐的解决方案,但没有成功。

因此,本着婴儿学习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名称空间,也不确定为什么由于导出dummy函数而不能在没有Trimmed...的情况下仅调用dummy

1 个答案:

答案 0 :(得分:2)

如何加载模块。使用以下任一方法:

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

至少在我的茱莉亚上。

您的代码的一个侧面注释是Utils没有在模块中定义,您尝试导出它(请注意,在Julia中,从include处获取文件并不重要-此功能的工作方式类似于复制粘贴代码)。