在Julia中导入自定义模块是否导致必须相对于Main引用它们?

时间:2018-12-09 05:35:03

标签: julia

我在导入Julia中的模块时发现these instructions,但是却出现了一种奇怪的行为,我想知道这是否正常。

我的文件tst.jlTmp.jl是:

tst.jl
    1 include("./Tmp.jl")
    2 import Main.Tmp
    3 
    4 Main.Tmp.greetings()

Tmp.jl
    1 module Tmp
    2     export greetings
    3     function greetings()
    4         println("Greetings Earthlings")
    5     end                                                                              
    6 end

但是我的tst.jl不能看到Tmp,除非它在Main下。

我的LOAD_PATH看起来也很奇怪:

julia> LOAD_PATH
3-element Array{String,1}:
 "@"      
 "@v#.#"  
 "@stdlib"

这是正常现象,还是我的安装有问题?

我尝试使用JuliaBox并得到

julia> LOAD_PATH
3-element Array{Any,1}:
 "/opt/julia-0.6.2/local/share/julia/site/v0.6"
 "/opt/julia-0.6.2/share/julia/site/v0.6"
 "/home/jrun/.julia/v0.6"

但是,那是v0.6,而我在OpenSUSE Tumbleweed上使用了Julia v1.0.2。

我从https://julialang.org/downloads/下载了二进制文件,并手动将所有libs移到了相应的根目录。

1 个答案:

答案 0 :(得分:4)

  

但是我的tst.jl除非在Main下,否则看不到Tmp。

否,您应该使用相对的模块路径,请参见Relative and absolute module paths

tst.jl
    1 include("./Tmp.jl")
    2 using .Tmp
    3 
    4 greetings()
  

我的LOAD_PATH看起来也很奇怪:

别担心,这在Julia1.0时代是正常的。外部参考:https://discourse.julialang.org/t/interpreting-load-path-in-1-0/13529