Поиск…


Синтаксис

  • модуль my.package;
  • импортировать my.package;
  • import my.package: function;
  • import fancyName = mypackage;
  • import my.package: fancyFunctionName = function;

замечания

Модули автоматически предоставляют область пространства имен для их содержимого. Модули поверхностно напоминают классы, но отличаются тем, что:

  • Есть только один экземпляр каждого модуля, и он статически выделяется.
  • Виртуальной таблицы нет.
  • Модули не наследуют, у них нет супермодулей и т. Д.
  • Только один модуль для каждого файла.
  • Символы модулей могут быть импортированы.
  • Модули всегда компилируются в глобальном масштабе и не зависят от окружающих атрибутов или других модификаторов.
  • Модули могут группироваться в иерархии, называемые пакетами.

Модули предлагают несколько гарантий:

  • Порядок импорта модулей не влияет на семантику.
  • На семантику модуля не влияет то, что импортирует его.
  • Если модуль C импортирует модули A и B, любые модификации B не будут молча изменять код в C, который зависит от A.

Глобальный импорт

import std.stdio;
void main()
{
    writeln("Hello World!");
}

Несколько импорта могут быть указаны в одной строке, разделенной comma или новой строкой.

import std.stdio, std.math;
import std.datetime;
void main()
{
    writeln("2^4: ", pow(2, 4));
    writeln("Current time: ", Clock.currTime());
}

Селективный импорт

Селективный импорт может помочь очистить пространство имен и ускорить время компиляции, потому что компилятору нужно только разобрать конкретные выбранные функции.

import std.stdio: writeln;
void main()
{
    writeln("Hello world");
}

Местный импорт

Вы также можете импортировать символы в любой области, импорт будет проверяться только тогда, когда область требуется (т.е. скомпилирована), а импортированные имена будут отображаться только в области импорта. Чаще всего область локального импорта - это функции, структуры и классы.

void main()
{
    import std.stdio: writeln;
    writeln("Hello world");
}
// writeln isn't defined here

Государственный импорт

Модули могут быть открыты для других модулей с public imports .

public import std.math;
// only exports the symbol 'pow'
public import std.math : pow;

Переименованный импорт

Можно указать локальное имя для импорта, с помощью которого все ссылки на символы модуля должны быть квалифицированы следующим образом:

import io = std.stdio; 
void main()
{
    io.writeln("Hello world");
    std.stdio.writeln("hello!"); // error, std is undefined
    writeln("hello!");           // error, writeln is undefined
}

Переименованный импорт удобен при работе с очень длинными именами импорта.

Переименованный и выборочный импорт

Селективный импорт также может быть переименован.

void main()
{
    import std.stdio : fooln = writeln;
    fooln("Hello world");
}

Объявление модуля

Модули имеют взаимно однозначное соответствие исходным файлам. Имя модуля по умолчанию является именем файла с удаленным контуром и расширением и может быть явно указано с объявлением модуля. ModuleDeclaration устанавливает имя модуля и того, к какому пакету он принадлежит. Если отсутствует, имя модуля принимается за одно и то же имя (лишено пути и расширения) имени исходного файла.

module my.fancy.module;


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