Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

4.5.9 Выражения declare

Выражения declare позволяют объявлять локальные константы и переименования объектов в контексте выражения.

Синтаксис

declare_expression ::=
declare {declare_item}
begin body_expression
declare_item ::= object_declaration | object_renaming_declaration
В любом месте, где Правила Синтаксиса допускают выражение, может быть использовано declare_expression вместо выражения, при условии, что оно немедленно окружено скобками.

Правила допустимости

declare_item, являющийся object_declaration, должен объявлять константу неограниченного типа.
declare_item, являющийся object_renaming_declaration (см. 8.5.1), не должен переименовывать объект ограниченного типа, если любой оперативный элемент имени object_name является преобразованием значения или только что сконструированным (см. 4.4).
Следующие элементы не допускаются внутри declare_expression: объявление, содержащее зарезервированное слово aliased; attribute_designator Access или Unchecked_Access; или анонимный тип доступа.

Правила разрешения имен

Если ожидается, что declare_expression будет типа T, то ожидается, что body_expression будет типа T. Аналогично, если declare_expression должен разрешиться к типу T, то body_expression должен разрешиться к типу T.
Тип declare_expression — это тип body_expression.

Динамическая семантика

При вычислении declare_expression declare_itemы обрабатываются по порядку, а затем вычисляется body_expression. Значение declare_expression — это значение body_expression.

Примеры

Пример использования выражения declare как пост-условия для Ada.Containers.Vectors."&" (см. A.18.2):
with Post =>
(declare
Result renames Vectors."&"'Result;
Length : constant Count_Type := Left.Length + Right.Length;
begin
Result.Length = Length and then
not Tampering_With_Elements_Prohibited (Result) and then
not Tampering_With_Cursors_Prohibited (Result) and then
Result.Capacity >= Length)


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API