ada Parameterized Types Variant Record Structures


A discriminant of a record type may influence the structure of objects. A choice of components may exists in an object according as a discriminant had had a particular value when the object was created. To support this variation, a record type's definition includes a distinction by cases that depends on the discriminant:

type Fruit is (Banana, Orange, Pear);

type Basket (Kind : Fruit) is
      case Kind is
         when Banana =>
            Bunch_Size      : Positive;
            Bunches_Per_Box : Natural;
         when Pear | Orange =>
            Fruits_Per_Box  : Natural;
      end case;
   end record;

Then to create a box for bananas,

Box : Basket (Banana);

The Box object now has two record components in addition to its discriminant, Kind, namely Bunch_Size and Bunches_Per_Box.