Справочник по Ada 2005
8.4 Операторы use
Оператор use_package_clause обеспечивает прямую видимость объявлений, присутствующих во видимой части пакета; оператор use_type_clause обеспечивает прямую видимость примитивных операторов типа.
Синтаксис
Правила легальности
Имя пакета package_name оператора 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, если он обозначен именем package_name этого оператора. Тип называется в операторе use_type_clause, если он определяется меткой subtype_mark этого оператора.
Для каждого пакета, названного в операторе use_package_clause, область видимости которого включает данное место, каждое объявление, расположенное непосредственно внутри декларативной области пакета, является потенциально видимым в этом месте, если объявление видимо в этом месте. Для каждого типа T или T'Class, названного в операторе use_type_clause, область видимости которого включает данное место, объявление каждого примитивного оператора типа T потенциально видимо в этом месте, если его объявление видимо в этом месте.
Объявление является видимым, если оно потенциально видимо, за исключением случаев конфликта имён:
- Потенциально видимое объявление не является видимым, если рассматриваемое место находится в непосредственной области видимости одноимённого объявления.
- Потенциально видимые объявления, имеющие одинаковое имя, не являются видимыми, если каждое из них не является перегружаемым объявлением.
Динамическая семантика
Выполнение оператора 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;