Агрегаты для записей
Так же как и в случае массива, все множество значений элементов записи может присваиваться с помощью агрегата. При этом агрегат должен предоставлять значения для всех компонентов записи даже в случаях когда некоторые компоненты обеспечены значениями по-умолчанию. Для записей различают агрегаты использующие позиционную, именованную и смешанную
нотацию.
Примером использования позиционного агрегата может служить следующее:
Expensive_Bike := (Aluminium, Cannondale, Cantilever, Cantilever); |
При позиционной нотации порядок следования присваиваемых значений в агрегате соответствует порядку следования полей в описании типа записи.
Альтернативно позиционной нотации, показанной выше, для присваивания таких же значений полям переменной Expensive_Bike
можно применить агрегат использующий именованную нотацию. В этом случае поля записи могут перечисляться в произвольном порядке:
Expensive_Bike := ( Rear_Brake => Cantilever Front_Brake => Cantilever, Manufacturer => Cannondale, Frame => Aluminium, ); |
Для записей допускается смешивать в одном агрегате оба варианта нотации. При этом все позиционные значения должны предшествовать именованным значениям. Такой вариант нотации будет смешанным.
Также как и в случае агрегатов для массивов, в агрегатах для записей допускается использование опции others. При этом, для опции others должен быть представлен хотя бы один компонент, а в случае когда для опции others предоставляется более одного компонента, все компоненты должны иметь один и тот же тип.
Агрегаты являются удобным средством указания значений полей при описании переменных и констант:
Expensive_Bike : Bicycle := (Aluminium, Cannondale, Cantilever, Cantilever); |
Одинаковые значения могут присваиваться разным полям записи при использовании символа '|'.
Expensive_Bike := ( Frame => Aluminium, Manufacturer => Cannondale, Front_Brake | Rear_Brake => Cantilever ); |
В заключение обсуждения применения агрегатов для записей рассмотрим следующий обобщающий пример:
type Summary is record Field_1 : Boolean; Field_2 : Float; Field_3 : Integer; Field_4 : Integer; end record; Variable_1 : Summary := (True, 10.0, 1, 1); -- позиционная нотация Variable_2 : Summary := ( -- именованная нотация Field_4 => 1 Field_3 => 1, Field_2 => 10.0, Field_1 => True ); Variable_2 : Summary := ( -- смешанная нотация True, 10.0, Field_4 => 1, Field_3 => 1 ); -------------------------- использование символа '|' Variable_4 : Summary := ( True, 10.0, Field_3|Field_4 => 1 ); Variable_5 : Summary := ( Field_1 => True, Field_2 => 10.0, Field_3|Field_4 => 1 ); -------------------------- использование others Variable_6 : Summary := (True, 10.0, others => 1); Variable_7 : Summary := ( Field_1 => True, Field_2 => 10.0, others => 1 ); |