ada
Параметрированные типы
Поиск…
Вступление
Все составные типы, отличные от массивов, могут иметь дискриминаторы, которые являются компонентами со специальными свойствами. Дискриминаторы могут быть дискретного типа или типа доступа. В последнем случае тип доступа может быть именованным типом доступа или может быть анонимным. Дискриминатор типа анонимного доступа называется дискриминатором доступа по аналогии с параметром доступа.
Типы дискретизированных записей
В случае типа дискриминированной записи некоторые из компонентов известны как дискриминаторы, а остальные компоненты могут зависеть от них. Дискриминанты можно рассматривать как параметризацию типа, и синтаксис показывает эту аналогию. В этом примере мы создаем тип, который предоставляет квадратную матрицу с положительным параметром:
type Square(X: Positive) is
record
S: Matrix(1 .. X, 1 .. X);
end record;
Затем, чтобы создать квадрат 3 на 3, просто назовите тип yout Square следующим образом:
Sq: Square(3);
Вариантные записывающие структуры
Дискриминатор типа записи может влиять на структуру объектов. В объекте может существовать выбор компонентов, поскольку дискриминант имел конкретное значение при создании объекта. Чтобы поддержать этот вариант, определение типа записи включает в себя различие по случаям, зависящим от дискриминанта:
type Fruit is (Banana, Orange, Pear);
type Basket (Kind : Fruit) is
record
case Kind is
when Banana =>
Bunch_Size : Positive;
Bunches_Per_Box : Natural;
when Pear | Orange =>
Fruits_Per_Box : Natural;
end case;
end record;
Затем, чтобы создать коробку для бананов,
Box : Basket (Banana);
Объект Box теперь имеет два компонента записи в дополнение к его дискриминанту, Kind , а именно Bunch_Size и Bunches_Per_Box .