为什么Juila模块必须以点开头?

时间:2019-05-13 16:11:09

标签: julia

为什么模块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。为什么?

2 个答案:

答案 0 :(得分:1)

因为您在当前模块中定义了模块A。点表示“为此在当前模块内部查找”。 https://docs.julialang.org/en/v1/manual/modules/#Relative-and-absolute-module-paths-1

答案 1 :(得分:-5)

深入研究-答案似乎是-不要使用模块

  1. 说明文件有误

enter image description here


实际上,模块的使用与文件的位置紧密相关,可以是using Foousing .Foousing ..Foousing Main.Foo-取决于位置Foo模块相对于导入该文件的文件的位置。我个人认为-这种设计有很多问题。

  1. VSCode编辑器不支持,它不了解using ..Foo。还有其他使用模块的方法,包括更改startup.jlJULIA_LOAD_PATHS-它们都不起作用。我假设没有人注意到这些问题,因为没有人实际使用模块。

  2. YCombinator上的最佳答案-给出相同的答案-在Julia中使用模块的最佳方法-根本不使用它https://news.ycombinator.com/item?id=19232824