代码之家  ›  专栏  ›  技术社区  ›  Luca

从Julia中的本地目录加载模块

  •  3
  • Luca  · 技术社区  · 6 年前

    所以,本着我的孩子逐步学习朱莉娅的精神,我尝试在本地创建一个模块。我的模块的文件夹结构如下:

    - 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
    

    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... 因为我出口了 笨蛋

    1 回复  |  直到 6 年前
        1
  •  3
  •   Bogumił Kamiński    6 年前

    如何加载模块。使用以下任一选项:

    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
    

    至少在我的朱莉娅身上。

    代码的一个附带注释是 Utils 未在模块中定义,您尝试将其导出(请注意,在Julia中,从何处获取要导出的文件并不重要) 包括 -此函数的工作方式类似于复制粘贴代码)。