Поиск…


Синтаксис

  • модуль модуля; ...; конец
  • использование модуля
  • модуль импорта

Копировать код в модуль

Ключевое слово 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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow