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