загрузка модуля из локального каталога в Julia - PullRequest
0 голосов
/ 26 сентября 2018

Есть и другие вопросы, связанные с этой проблемой в SO, но я думаю, что я попробовал рекомендованное решение, но безуспешно.

Итак, в духе моих маленьких шагов к изучению Юлии, я попытался создатьмодуль локально.Структура папок моего модуля выглядит следующим образом:

- TrimmedGrassmanAvwerage/
    - src/
        - TrimmedGrassmanAverage.jl
        - Utils/
            - dummy.jl

Содержимое dummy.jl просто:

function dummy(x)
    x + oneunit(x)
end

Аналогично, содержимое TrimmedGrassmanAverage:

module TrimmedGrassmanAverage

export Utils,
       dummy

include("Utils/dummy.jl")

end

Теперь в моем REPL я делаю следующее:

julia> include("TrimmedGrassmanAverage/src/TrimmedGrassmanAverage.jl")

Это возвращает:

Main.TrimmedGrassmanAverage

Теперь я делаю:

using TrimmedGrassmanAverage

Это возвращает ошибку:

ERROR: ArgumentError: Package TrimmedGrassmanAverage not found in current   path:
- Run `Pkg.add("TrimmedGrassmanAverage")` to install the TrimmedGrassmanAverage package.

Я думал, что выполнение `include (" ... ") поместит пакет в путь, и Джулия сможет его найти.Тем не менее, очевидно, что пропущено еще несколько шагов.

РЕДАКТИРОВАТЬ

Однако я могу сделать:

using Main.TrimmedGrassmanAverage

и затем я могу позвонить:

TrimmedGrassmanAverage.dummy(10);

Я не уверен, почему нужно добавить пространство имен Main, а также почему я не могу просто вызвать dummy без Trimmed..., так как я экспортирую функцию dummy.

1 Ответ

0 голосов
/ 26 сентября 2018

Как загрузить модуль.Используйте:

using Main.TrimmedGrassmanAverage

или

using .TrimmedGrassmanAverage

, что будет иметь тот же эффект.Причина в том, что при запуске include ваш модуль определяется в пределах Main модуля.using Something ищет пакет (и вы определили модуль только в файле).Поиск пакета регулируется переменными LOAD_PATH и DEPOT_PATH (см. https://docs.julialang.org/en/latest/stdlib/Pkg/#Glossary-1).

РЕДАКТИРОВАТЬ: на самом деле кажется, что dummy правильно экспортируется на Julia 1.0

julia> module TrimmedGrassmanAverage

export Utils,
       dummy

function dummy(x)
    x + oneunit(x)
end
end
Main.TrimmedGrassmanAverage

julia> using Main.TrimmedGrassmanAverage

julia> dummy(10)
11

по крайней мерена моей Джулии.

Дополнительный комментарий к вашему коду: Utils не определен в модуле, и вы пытаетесь экспортировать его (обратите внимание, что в Джулии не имеет значения, откуда вы берете файл, который выinclude - эта функция работает как копирование-вставка кода).

...