Julia Language
Модули
Поиск…
Синтаксис
- модуль модуля; ...; конец
- использование модуля
- модуль импорта
Копировать код в модуль
Ключевое слово module
можно использовать для создания модуля, который позволяет организовывать код и размещать имена. Модули могут определять внешний интерфейс, обычно состоящий из export
символов. Для поддержки этого внешнего интерфейса модули могут иметь невыполненные внутренние функции и типы, не предназначенные для общего пользования.
Некоторые модули в основном существуют для переноса типа и связанных функций. Такие модули, как правило, обычно называются с множественной формой имени типа. Например, если у нас есть модуль, который предоставляет тип Building
, мы можем назвать такой модуль Buildings
.
module Buildings
immutable Building
name::String
stories::Int
height::Int # in metres
end
name(b::Building) = b.name
stories(b::Building) = b.stories
height(b::Building) = b.height
function Base.show(io::IO, b::Building)
Base.print(stories(b), "-story ", name(b), " with height ", height(b), "m")
end
export Building, name, stories, height
end
Затем модуль можно использовать с using
оператора:
julia> using Buildings
julia> Building("Burj Khalifa", 163, 830)
163-story Burj Khalifa with height 830m
julia> height(ans)
830
Использование модулей для организации пакетов
Как правило, пакеты состоят из одного или нескольких модулей. По мере роста пакетов может оказаться полезным организовать основной модуль пакета на более мелкие модули. Общей идиомой является определение этих модулей как подмодулей основного модуля:
module RootModule
module SubModule1
...
end
module SubModule2
...
end
end
Первоначально ни корневой модуль, ни подмодули не имеют доступа к экспортированным символам друг друга. Однако для решения этой проблемы поддерживается относительный импорт:
module RootModule
module SubModule1
const x = 10
export x
end
module SubModule2
# import submodule of parent module
using ..SubModule1
const y = 2x
export y
end
# import submodule of current module
using .SubModule1
using .SubModule2
const z = x + y
end
В этом примере значение RootModule.z
равно 30
.