Объем переменных пользовательского модуля Julia

Я начинаю писать свой первый пользовательский модуль в Джулии. Что я делаю, так это записываю все файлы в папку, затем импортирую их в ModuleName.jl файл и, в конце концов, пишу тестовую программу, которая выполняет предварительно скомпилированную main() функцию, которая вызывает мой пользовательский модуль (мне нравится придерживаться модульного стиля программирования).

Проблема в том, что я думаю, что что-то упускаю при использовании ключевых слов using и import. В моем тестовом файле у меня есть следующие строки:

push!(LOAD_PATH,"./ModuleNameFolder")
using ModuleName

Я думал, что функции ModuleName при загрузке с using можно вызывать без явного ModuleName.myfunct(), а только через myfunct(), а это не так. Если я опускаю ModuleName, компилятор выдает UndefVarError. Что я делаю не так? Я хотел бы перенести все функции моего пользовательского модуля в основную область

(от незнания) почему ты используешь push! + using вместо просто include("./ModuleNameFolder/ModuleName")?

DecowVR 03.04.2022 10:14

@Ehub, пожалуйста, сделайте шаг назад и задайте вопрос об использовании модулей Julia. В своем вопросе вы уже на полпути к какому-то неправильному подходу, но я не уверен, что именно вам нужно. Скорее всего вы спрашиваете, как использовать модули? Также посмотрите docs.julialang.org/en/v1/manual/modules и все, что непонятно, спрашивайте здесь!

Przemyslaw Szufel 03.04.2022 12:32

@DecowVR, потому что я думал, что это наивный способ импортировать модуль. Может быть то, что я сделал, это перебор, спасибо за ваше замечание

Ehub 03.04.2022 14:47

@PrzemyslawSzufel Я хочу не писать ModuleName.myfunct() каждый раз, когда звоню myfunct(). Я думал, что ключевое слово using сделает myfunct() доступным напрямую, но, похоже, это не так.

Ehub 03.04.2022 14:55

в этом случае в определении модуля вам нужно иметь export myfunc. Таким образом, каждый раз, когда вы делаете using MyModule, myfunc будет перенесено в пространство имен Main.

Przemyslaw Szufel 03.04.2022 18:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добро пожаловать в Юлию. Что вы имеете в виду под 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() с тестами для каждой функции модуля. Большое спасибо за ваш урок

Ehub 03.04.2022 14:52

Оказалось, что я пропустил export функции своего модуля. Еще раз спасибо за ваш совет!

Ehub 03.04.2022 14:59

@Ehub: вам не нужно оборачивать тесты в «основную» функцию, просто напишите тестовые функции

Antonello 03.04.2022 20:54

Другие вопросы по теме