D Language
Импорт и модули
Поиск…
Синтаксис
- модуль 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;