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