当前位置:  开发笔记 > IOS > 正文

使Julia在LOAD_PATH中查找文件

如何解决《使Julia在LOAD_PATH中查找文件》经验,为你挑选了1个好方法。

我想通过修改LOAD_PATH变量来帮助Julia找到我的.jl文件:

julia> readdir()
1-element Array{String,1}:
 "test.jl"

shell> cmd /c type test.jl
# Test.jl
module Test
export f
f() = println("hi")
end

julia> push!(LOAD_PATH,pwd());

julia> import Test
ERROR: ArgumentError: Module Test not found in current path.
Run `Pkg.add("Test")` to install the Test package.
 in require(::Symbol) at .\loading.jl:365

第一次调用readdir()证明我在当前目录中有一个名为test.jl的文件。以下shell调用显示此文件包含一个名为Test的模块。下一个调用push!(LOAD_PATH,pwd());会将当前目录放入LOAD_PATH。但是,即使当前目录位于中LOAD_PATH,Julia仍无法Test在test.jl中找到该模块。

怎么了?



1> Gnimuc..:

错误是在谈论一些有关require。正如文档所说:

给定使用语句Foo,系统将Foo在中查找Main。如果模块不存在,则系统尝试require("Foo"),这通常会导致从已安装的程序包中加载代码。...... require区分大小写的所有平台,包括那些喜欢的MacOS和Windows不区分大小写的文件系统。

其原因是显而易见的:require找不到指定的文件TestLOAD_PATH。因此,我们需要使文件名与模块名匹配,但这只是一个约定,不是强制性规则。如果有人错误地跑步会怎样using test

julia> push!(LOAD_PATH,pwd())
julia> using test
WARNING: requiring "test" in module "Main" did not define a corresponding module.
julia> whos()
                          Base  34427 KB     Module
                          Core  12386 KB     Module
                          Main  41296 KB     Module
                          Test   1837 bytes  Module

结果表明我们已经在其中加载了文件test.jl和module(Test),但实际上未加载using/import模块。这是受人尊敬的行为,因为我们使用了错误的模块名称,这也是julia在警告中抱怨的原因。在这种情况下,using test等效于include("test.jl"),但是我强烈建议您遵循约定并且不要使用此行为。

require在此PR之后,BTW 通常变得区分大小写。副作用是您LOAD_PATH还应该区分大小写,此公关将在julia-0.6中解决此问题。

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有