Julia如何使用丢失的包?

时间:2016-10-26 18:15:20

标签: julia

如果您没有安装包using Foo,那么Julia对语句Foo的确做什么?据我所知朱莉娅开始搜索JULIA_LOAD_PATH,但是怎么样?

JULIA_LOAD_PATH的根级别,必须有一个名为Foo.jl的目录,其中Foo部分可能不区分大小写且.jl后缀是可选的?

在此Foo.jl目录中,必须有一个Foo.jl的源文件名module Foo

1 个答案:

答案 0 :(得分:4)

using隐式调用require,间接调用find_in_path

function find_in_path(name::AbstractString, wd = pwd())
    isabspath(name) && return name
    base = name
    # this is why `.jl` suffix is optional
    if endswith(name,".jl")
        base = name[1:end-3]
    else
        name = string(base,".jl")
    end
    if wd !== nothing
        isfile(joinpath(wd,name)) && return joinpath(wd,name)
    end
    for prefix in [Pkg.dir(); LOAD_PATH]
        path = joinpath(prefix, name)
        isfile(path) && return abspath(path)
        path = joinpath(prefix, base, "src", name)
        isfile(path) && return abspath(path)
        path = joinpath(prefix, name, "src", name)
        isfile(path) && return abspath(path)
    end
    return nothing
end

上面的源代码显示name上没有其他操作,这意味着Foo部分应该是敏感目前依赖于文件系统,请参阅下面的评论)。并且目录名称不必与您的文件名兼容,只要目录在LOAD_PATH中,它就可以是任何内容。