Почему модуль Juila должен начинаться с точки? - PullRequest
2 голосов
/ 13 мая 2019

Почему модуль 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 ]

1 голос
/ 13 мая 2019

Поскольку вы определяете модуль A внутри вашего текущего модуля.Точка означает «заглянуть внутрь текущего модуля для этого».https://docs.julialang.org/en/v1/manual/modules/#Relative-and-absolute-module-paths-1

0 голосов
/ 13 мая 2019

После копания глубже - похоже, что ответ - не используйте модули .

  1. Документация неверна, там написано

enter image description here


Если в действительности использование модуля сильно привязано к расположению файлов, это может быть using Foo, using .Foo, using ..Foo или using Main.Foo - в зависимости от расположения модуля Foo относительно файл, который импортирует его. По моему личному мнению, что-то не так с этим дизайном.

  1. Нет поддержки в редакторе VSCode, он не понимает using ..Foo. Существуют и другие способы использования модулей, включая изменение startup.jl или JULIA_LOAD_PATHS - ни один из них не работает. Я предполагаю, что никто не замечает эти проблемы, потому что никто фактически не использует модули.

  2. Лучший ответ на YCombinator - дает тот же ответ - лучший способ использовать модули в Юлии - это вообще не использовать его https://news.ycombinator.com/item?id=19232824

...