为什么模块using .A
必须带点前缀?如果省略点,则不起作用。
文件./A.jl
module A
export sayHi
function sayHi()
println("hi")
end
end
文件./Main.jl
include("./A.jl")
using .A # <= Why it has to be prefixed with dot?
sayHi()
运行,启动REPL并输入
include("./Main.jl")
第2部分
如果将文件A.jl
移动到其他位置,例如../some-dir/A.jl
,则必须将其前缀为两个点 using ..A
。为什么?
答案 0 :(得分:1)
因为您在当前模块中定义了模块A。点表示“为此在当前模块内部查找”。 https://docs.julialang.org/en/v1/manual/modules/#Relative-and-absolute-module-paths-1
答案 1 :(得分:-5)
深入研究-答案似乎是-不要使用模块。
实际上,模块的使用与文件的位置紧密相关,可以是using Foo
,using .Foo
,using ..Foo
或using Main.Foo
-取决于位置Foo
模块相对于导入该文件的文件的位置。我个人认为-这种设计有很多问题。
VSCode编辑器不支持,它不了解using ..Foo
。还有其他使用模块的方法,包括更改startup.jl
或JULIA_LOAD_PATHS
-它们都不起作用。我假设没有人注意到这些问题,因为没有人实际使用模块。
YCombinator上的最佳答案-给出相同的答案-在Julia中使用模块的最佳方法-根本不使用它https://news.ycombinator.com/item?id=19232824