Axiom Справочник языка

11 · Процедуры и функции

Оператор IMPORT

Программа растёт, и её части удобнее держать в отдельных исходных файлах. Чтобы один файл мог пользоваться подпрограммами, типами и данными другого, он подключает его оператором IMPORT: после этого открытые имена зависимости доступны без префикса.

Синтаксис и расположение

IMPORT moduleName

moduleName — идентификатор, совпадающий с именем файла без расширения. Это имя, а не строковый путь; точки, разделители каталогов, расширение и кавычки не указываются.

Оператор записывается в начале файла до объявлений и исполняемых инструкций. Каждый файл задаёт собственные импорты. В IDE открытая именованная зависимость берётся из снимка редактора вместе с несохранёнными правками; закрытая зависимость читается с диска. Уже запущенная программа использует снимок начала запуска. В CLI и IDE поиск выполняется в папке сохранённой точки входа; расширение файла — .axm.

Действие

Открытые имена зависимости становятся доступными без префикса. Закрытые имена остаются доступны только внутри исходного модуля. Импортированный модуль и его зависимости инициализируются до текущего модуля. Повторение одного IMPORT не запускает инициализацию повторно.

Простейший случай — подключение одного файла с открытой функцией:

IMPORT tools
PRINT Square(5)

Запускаемый пример и содержимое зависимости приведены в разделе «Модули и исходные файлы».

Правила и ограничения

Циклический импорт, включая импорт текущим файлом самого себя, запрещён даже при отсутствии исполняемых инструкций. Имена SUB и FUNCTION не могут совпадать с именами встроенных функций. Два импорта с одинаковым открытым именем одной категории дают неоднозначность: SUB и FUNCTION составляют одну категорию, DIM и CONST — другую, TYPE — третью. Переименуйте объявление или измените состав импортов. Локальное объявление не может заменять импортированное имя той же категории. PUBLIC в импортирующем модуле не переэкспортирует чужие объявления.

Совпадение имён разных категорий допускается. В выражении вызова сначала ищется конструктор TYPE, затем переменная, затем подпрограмма. Если переменная INTEGER имеет имя функции, попытка вызова даёт MB2020; функция не выбирается автоматически.

Относительные пути файловых операций по-прежнему разрешаются от папки запущенного файла в IDE. Импорт не меняет рабочую папку и не создаёт файлы или каталоги.

Диагностика

MB2049
Модуль отсутствует в составе программы или не найден в папке точки входа.
MB4004
CLI не смог прочитать зависимость из-за отказа файловой системы, например отсутствия доступа к найденному файлу. Это отличается от MB2049, когда модуль не найден. Команды check и run завершаются с кодом 2; команда check --json сохраняет формат JSON и возвращает эту диагностику в нём.
MB2050
Несколько документов задают одно имя модуля.
MB2051
В явном наборе модулей не найдена точка входа.
MB2052
Обнаружен цикл импорта или импорт самого себя.
MB2053
Внешнее обращение использует закрытое имя.
MB2054
Несколько импортов открывают одинаковое имя одной категории.
MB2055
Импортированное имя конфликтует с другим доступным объявлением.
MB1001–MB1002
Нарушена запись или расположение IMPORT.

См. также

PUBLIC и PRIVATE · Модули