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

3.7.1 Ограничения по дискриминантам

Ограничение по дискриминантам discriminant_constraint задаёт значения дискриминантов для данного типа с дискриминантами.

Синтаксис

discriminant_constraint ::=
(discriminant_association {, discriminant_association})
discriminant_association ::=
[discriminant_selector_name {| discriminant_selector_name} =>] expression
Ограничение по дискриминантам discriminant_association считается именованным, если оно содержит один или несколько discriminant_selector_nameов; в противном случае оно считается позиционным. В ограничении по дискриминантам discriminant_constraint любые позиционные ассоциации должны предшествовать любым именованным ассоциациям.

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

Каждый discriminant_selector_name именованной discriminant_association должен указывать на дискриминант типа, подвергающегося ограничению; дискриминанты, таким образом указанные, являются связанными дискриминантами этой именованной ассоциации. Для позиционной ассоциации связанным дискриминантом является дискриминант, спецификация которого появилась в соответствующей позиции в known_discriminant_part, определяющем дискриминанты типа, подвергающегося ограничению.
Ожидаемый тип для expression в discriminant_association соответствует типу связанного(ых) дискриминанта(ов).

Правила легальности

Ограничение по дискриминантам discriminant_constraint разрешено только в subtype_indication, в которой subtype_mark обозначает либо неограниченный тип с дискриминантами, либо неограниченный тип указателя, а назначенный тип — неограниченный тип с дискриминантами. Однако, в случае типа указателя, discriminant_constraint является легитимным только если любая разыменование значения типа указателя известно как ограниченное (см. 3.3). В дополнение к местам, где обычно применяются правила легальности (см. 12.3), эти правила применяются также в частях для доступа к экземпляру генерируемого блока.
Именованная discriminant_association с более чем одним selector_name разрешена только если именованные дискриминанты являются одного типа. Ограничение по дискриминантам discriminant_constraint должно предоставлять ровно одно значение для каждого дискриминанта ограниченного типа.
Этот абзац был удалён.

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

Ограничение по дискриминантам discriminant_constraint является совместимым с неограниченным типом с дискриминантами, если каждое значение дискриминанта принадлежит типу соответствующего дискриминанта.
Составное значение удовлетворяет ограничению по дискриминантам тогда и только тогда, когда каждый дискриминант составного значения имеет значение, заданное ограничением по дискриминантам.
Для обработки ограничения по дискриминантам discriminant_constraint, expressionы в discriminant_associationы оцениваются в произвольном порядке и преобразуются к типу соответствующего дискриминанта (что может вызвать ошибку Constraint_Error — см. 4.6); expression именованной ассоциации вычисляется (и преобразуется) один раз для каждого связанного дискриминанта. Результат каждого вычисления и преобразования является значением, налагаемым ограничением для связанного дискриминанта.
ПРИМЕЧАНИЯ
62 Правила языка гарантируют, что дискриминант объекта всегда имеет значение, либо из явного, либо из неявного инициализации.

Примеры

Примеры (используя типы, объявленные выше в подразделе 3.7):
Large : Buffer(200); -- ограниченный, всегда 200 символов
-- (явное значение дискриминанта)
Message : Buffer; -- неограниченный, изначально 100 символов
-- (значение дискриминанта по умолчанию)
Basis : Square(5); -- ограниченный, всегда 5 на 5
Illegal : Square; -- недопустимо, Square должен быть ограничен


Spec-Zone.ru

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