Я начинаю писать свой первый пользовательский модуль в Джулии.
Что я делаю, так это записываю все файлы в папку, затем импортирую их в ModuleName.jl
файл и, в конце концов, пишу тестовую программу, которая выполняет предварительно скомпилированную main()
функцию, которая вызывает мой пользовательский модуль (мне нравится придерживаться модульного стиля программирования).
Проблема в том, что я думаю, что что-то упускаю при использовании ключевых слов using
и import
. В моем тестовом файле у меня есть следующие строки:
push!(LOAD_PATH,"./ModuleNameFolder")
using ModuleName
Я думал, что функции ModuleName
при загрузке с using
можно вызывать без явного ModuleName.myfunct()
, а только через myfunct()
, а это не так. Если я опускаю ModuleName
, компилятор выдает UndefVarError
.
Что я делаю не так? Я хотел бы перенести все функции моего пользовательского модуля в основную область
@Ehub, пожалуйста, сделайте шаг назад и задайте вопрос об использовании модулей Julia. В своем вопросе вы уже на полпути к какому-то неправильному подходу, но я не уверен, что именно вам нужно. Скорее всего вы спрашиваете, как использовать модули? Также посмотрите docs.julialang.org/en/v1/manual/modules и все, что непонятно, спрашивайте здесь!
@DecowVR, потому что я думал, что это наивный способ импортировать модуль. Может быть то, что я сделал, это перебор, спасибо за ваше замечание
@PrzemyslawSzufel Я хочу не писать ModuleName.myfunct()
каждый раз, когда звоню myfunct()
. Я думал, что ключевое слово using
сделает myfunct()
доступным напрямую, но, похоже, это не так.
в этом случае в определении модуля вам нужно иметь export myfunc
. Таким образом, каждый раз, когда вы делаете using MyModule
, myfunc
будет перенесено в пространство имен Main
.
Добро пожаловать в Юлию.
Что вы имеете в виду под precompiled main() function
? Тесты в Julia обычно задаются для определенного файла, который запускается автоматически при каждой отправке вашего кода в репозиторий, который вы используете для размещения кода.
В любом случае, попробуйте include ./ModuleName
, а затем using .ModuleName
(обратите внимание на точку). И не забудьте export
объекты в ModuleName
, которые вы хотите сделать доступными напрямую.
Посмотрите мой учебник: https://syl1.gitbook.io/julia-language-a-concise-tutorial/language-core/11-developing-julia-packages
Я имею в виду, что я написал функцию main()
с тестами для каждой функции модуля. Большое спасибо за ваш урок
Оказалось, что я пропустил export
функции своего модуля. Еще раз спасибо за ваш совет!
@Ehub: вам не нужно оборачивать тесты в «основную» функцию, просто напишите тестовые функции
(от незнания) почему ты используешь
push! + using
вместо простоinclude("./ModuleNameFolder/ModuleName")
?