Spec-Zone.ru › Ada 2005
Справочник по Ada 2005

12.4 Формальные объекты

Формальный объект обобщенного типа может использоваться для передачи значения или переменной в обобщенную единицу.

Синтаксис

formal_object_declaration ::=
список_идентификаторов : режим [исключение_нуля] метка_подтипа [:= выражение_по_умолчанию];
список_идентификаторов : режим определение_доступа [:= выражение_по_умолчанию];

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

Ожидаемый тип для выражения_по_умолчанию, если таковое имеется, для формального объекта — это тип формального объекта.
Для формального объекта обобщенного типа с режимом in ожидаемый тип фактического параметра — это тип формального объекта.
Для формального объекта обобщенного типа с режимом in out тип фактического параметра должен соответствовать типу, определяемому меткой подтипа, или, для формального_объекта_объявления с определением_доступа, — анонимному типу доступа. Если анонимный тип доступа является типом доступа к объекту, тип фактического параметра должен иметь тот же тип назначения, что и определение_доступа. Если анонимный тип доступа является типом доступа к подпрограмме, тип фактического параметра должен иметь соответствующий профиль, который соответствует типу определения_доступа.

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

Если формальный объект обобщенного типа имеет выражение_по_умолчанию, то режим должен быть in (явный или по умолчанию); в противном случае — in или in out.
Для формального объекта обобщенного типа с режимом in фактический параметр должен быть выражением. Для формального объекта обобщенного типа с режимом in out фактический параметр должен быть именем переменной, для которой разрешено переименование (см. 8.5.1).
В случае, когда тип формального объекта определяется определением_доступа, тип фактического и формального объекта:
  • должны оба быть типами доступа к объекту со статически совпадающими подтипами назначения и оба либо являются, либо не являются типами доступа к константам; или
  • должны оба быть типами доступа к подпрограмме с совместимыми по подтипу профилями назначения.
Для формального_объекта_объявления с исключение_нуля или определение_доступа, имеющим исключение_нуля:
  • если фактический параметр, соответствующий формальному_объекту_объявления, обозначает формальный объект обобщенного типа G, и экземпляр, содержащий фактический параметр, возникает внутри тела G или внутри тела обобщенной единицы, объявленной внутри области описания G, то объявление формального объекта G должно иметь исключение_нуля;
  • в противном случае, подтип фактического параметра, соответствующего формальному_объекту_объявления, должен исключать ноль. В дополнение к местам, где обычно применяются правила допустимости (см. 12.3), это правило применяется также в частях сведений об экземпляре обобщенной единицы.

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

формальное_объекта_объявление объявляет формальный объект обобщенного типа. Режим по умолчанию — in. Для формального объекта с режимом in номинальный подтип определяется меткой подтипа или определения_доступа в объявлении формального объекта. Для формального объекта с режимом in out его тип определяется меткой подтипа или определением_доступа в объявлении; его номинальный подтип является нестатическим, даже если метка подтипа обозначает статический подтип; для составного типа его номинальный подтип не ограничен, если первый подтип типа не ограничен, даже если метка подтипа обозначает ограниченный подтип.
В экземпляре формальное_объекта_объявление режима in является полным объявлением константы и объявляет новый автономный объект константы, инициализирующий выражение которого является фактическим, в то время как формальное_объекта_объявление режима in out объявляет представление, свойства которого идентичны свойствам фактического параметра.

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

Для оценки обобщенной_ассоциации для формального объекта режима in создается объект константы, значение фактического параметра преобразуется к номинальному подтипу формального объекта и присваивается объекту, включая любые корректировки значения — см. 7.6.
ПРИМЕЧАНИЯ
6 Ограничения, которые применяются к формальному объекту обобщенного типа с режимом in out, — это ограничения соответствующего фактического параметра (а не ограничения, подразумеваемые меткой подтипа, которая появляется в формальном_объекта_объявление). Поэтому для избежания путаницы рекомендуется использовать имя первого подтипа для объявления такого формального объекта.





Spec-Zone.ru

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