Поиск…


Вступление

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

Типы дискретизированных записей

В случае типа дискриминированной записи некоторые из компонентов известны как дискриминаторы, а остальные компоненты могут зависеть от них. Дискриминанты можно рассматривать как параметризацию типа, и синтаксис показывает эту аналогию. В этом примере мы создаем тип, который предоставляет квадратную матрицу с положительным параметром:

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 .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow