图中target1.jl中 有 target1 和 target2 两个module,
而在get.jl中 用push!改变路径后,using与文件名相同的target1 一切正常,
而 using target2 会 not found.
简言之,只能using和文件同名的module,
请问一下这是julia1.5的设计吗?或者我该怎样处理这个问题呢?
target1.jl
module target1
export foo
foo()=print(“target1”)
end
module target2
export goo
goo()=print(“target2”)
end
get.jl
push!(LOAD_PATH,“.”)
using target1
foo()
using target2
goo()
TERMINAL:
julia> push!(LOAD_PATH,“.”)
4-element Array{String,1}:
“@”
“@v#.#”
“@stdlib”
“.”
julia> using target1
julia> foo()
target1
julia> using target2
ERROR: ArgumentError: Package target2 not found in current path:
- Run
import Pkg; Pkg.add("target2")
to install the target2 package.
Stacktrace:
[1] require(::Module, ::Symbol) at .\loading.jl:893
julia> goo()
ERROR: UndefVarError: goo not defined
Stacktrace:
[1] top-level scope at REPL[5]:1
首先不推荐使用push LOAD_PATH的方法去加载包,这显然是在hack Julia的module系统。
和文件名相同是1.0时期就有的,但是这个是为了实现issue4600留的feature。加载本地的module请使用dev。相关文档可以在Pkg的文档里查到。或者在pkg模式下 ?dev
回车也可以
我在学习您的MyArrays这个教程,您能够在test.jl里面直接using MyArrays这个module没报错是单纯地因为和文件同名吗?这样一个文件存放一个同名module可以当作解决找不到module的简单方法吗?
您说的dev我看了文档,好像是改github上的已存在包的,我现在是还没上传到github。
另外问一下在julia中是不是package和module是一个概念?我是超级小白
不是。module是用来管理命名域的,package是一个完整的工程+一些额外的要求(比如test,版本等等)。在Julia里只要生成一个project文件夹,里面的和Project同名的在src目录下的module就可以直接using。