#module #export #julia
#модуль #экспорт #джулия
Вопрос:
Есть ли какая-либо причина использовать «экспорт» в файле (который не содержит модулей), который позже будет включен в другой файл? Я столкнулся с этим типом использования экспорта при просмотре некоторых пакетов на GitHub, что заставило меня задуматься. Например, рассмотрим Foo.jl:
# Foo.jl
export foo1
function foo1()
do something
end
function foo2()
do something
end
Который включен в Bar.jl
# Bar.jl
module Bar
include("Foo.jl")
other stuff
end
Не будет ли функция foo2() независимо находиться в области Bar, что делает использование «export» совершенно ненужным? Я видел подобные материалы в нескольких разных пакетах и на самом деле не понимаю причины.
Заранее большое спасибо за любую помощь,
Renato
Ответ №1:
Эти export
файлы не являются избыточными. Эти export
вопросы касаются не области Bar
, а скорее областей других импортируемых модулей Bar
. Если вы импортируете модуль Bar
через using Bar
в другом модуле или в Main
, имя foo1
будет общедоступным, так что вам нужно только написать просто foo1
без уточнений для доступа к функции foo1
вместо Bar.foo1
.
Если вы удалите эту export
инструкцию из Foo.jl
, вы увидите, что вы больше не сможете получить доступ к функции foo1
без уточнения имени модуля после выпуска using Bar
. Вам нужно либо написать Bar.foo1
, либо явно сделать foo1
видимым в этом модуле через, например, using Bar: foo1
или import Bar: foo1
.
include
Инструкция просто заставляет Julia оценивать код в этом модуле, чтобы вы могли думать о Bar.jl
так, как будто это
# Bar.jl
module Bar
export foo1
function foo1()
do something
end
function foo2()
do something
end
other stuff
end
Таким образом, export
инструкция экспортирует имя foo1
in Bar
в другие модули, которые импортируют модуль Bar
.
Вы можете найти более подробную информацию об импорте, экспорте и системе модулей в документации Julia.
Внутри модуля вы можете управлять тем, какие имена из других модулей видны (через импорт), и указывать, какие из ваших имен должны быть общедоступными (через экспорт). https://docs.julialang.org/en/v1/manual/modules/index.html#modules-1
Комментарии:
1. Это имеет смысл, и это на самом деле устраняет некоторые другие моменты замешательства, которые у меня тоже были. Большое спасибо!