Руководство по Ada (Ada 2022)
8.4 Операторы use
Оператор use_package_clause обеспечивает непосредственную видимость объявлений, присутствующих во видимой части пакета; оператор use_type_clause обеспечивает непосредственную видимость примитивных операторов типа.
Синтаксис
Правила легальности
имя_пакета_имя оператора use_package_clause должно указывать на нелимитированный вид пакета.
Статическая семантика
Для каждого оператора use_clause существует определенный фрагмент текста, называемый областью видимости оператора use_clause. Для оператора use_clause в рамках context_clause объявления library_unit_declaration или library_unit_renaming_declaration область видимости охватывает всю декларативную область объявления. Для оператора use_clause в рамках context_clause тела, область видимости охватывает всё тело и все подмодули (включая вложенные подмодули). Область видимости не включает context_clauseы сами по себе.
Для оператора use_clause непосредственно внутри декларативной области, область видимости — это часть декларативной области, начинающаяся сразу после оператора use_clause и простирающаяся до конца декларативной области. Однако, область видимости оператора use_clause в частной части библиотечного модуля не включает видимую часть любого публичного потомка этого библиотечного модуля.
Пакет именуется в операторе use_package_clause, если он обозначается именем_пакета_имя этого оператора. Тип именуется в операторе use_type_clause, если он определен маркером subtype_mark этого оператора.
Для каждого пакета, указанного в операторе use_package_clause, область видимости которого охватывает определённую точку, каждое объявление, расположенное непосредственно внутри декларативной области пакета, является потенциально видимым в этой точке, если объявление видно в этой точке. Для каждого типа T или T'Class, указанного в операторе use_type_clause, область видимости которого охватывает определённую точку, объявление каждого примитивного оператора типа T потенциально видно в этой точке, если оно видно в этой точке. Если оператор use_type_clause, область видимости которого охватывает определённую точку, содержит зарезервированное слово all, то следующие сущности также потенциально видны в этой точке, если объявление сущности видно в этой точке:
- Каждый примитивный подпрограмму типа T, включая каждое значение перечисления (если таковые имеются);
- Каждый подпрограмму, объявленный непосредственно внутри декларативной области, в которой объявлен родительский тип T, и работающий с типом класса, охватывающим T.
Некоторые неявные объявления могут стать потенциально видимыми в определенных контекстах, как описано в 12.6.
Объявление видимо, если оно потенциально видно, за исключением этих случаев конфликта именования:
- Потенциально видимое объявление не является видимым, если рассматриваемая точка находится в непосредственной области видимости омонима объявления.
- Потенциально видимые объявления, имеющие одинаковое идентификатор, не являются видимыми, если каждое из них не является перегружаемым объявлением.
Динамическая семантика
Выполнение оператора use_clause не оказывает никакого эффекта.
Примеры
Пример оператора use в контексте объявления:
with Ada.Calendar; use Ada;
Пример оператора use type:
use type Rational_Numbers.Rational; -- см. 7.1
Two_Thirds: Rational_Numbers.Rational := 2/3;
Two_Thirds: Rational_Numbers.Rational := 2/3;