ada
Geparametriseerde typen
Zoeken…
Invoering
Alle composiettypen behalve arrays kunnen discriminanten hebben, dit zijn componenten met speciale eigenschappen. Discriminanten kunnen van het discrete type of een toegangstype zijn. In het laatste geval kan het toegangstype een benoemd toegangstype zijn of anoniem. Een discriminant van een anoniem toegangstype wordt een toegangsdiscriminant genoemd naar analogie met een toegangsparameter.
Discriminerende recordtypen
In het geval van een gediscrimineerd recordtype, staan sommige componenten bekend als discriminanten en de resterende componenten kunnen hiervan afhankelijk zijn. Van de discriminanten kan worden gedacht dat ze het type parametriseren en de syntaxis onthult deze analogie. In dit voorbeeld maken we een type dat een vierkante matrix met een positieve parameter als parameter levert:
type Square(X: Positive) is
record
S: Matrix(1 .. X, 1 .. X);
end record;
Om een vierkant van 3 bij 3 te maken, noem je gewoon Square als volgt:
Sq: Square(3);
Verschillende recordstructuren
Een discriminant van een recordtype kan de structuur van objecten beïnvloeden. Een keuze van componenten kan bestaan in een object omdat een discriminant een bepaalde waarde had gehad toen het object werd gemaakt. Om deze variatie te ondersteunen, omvat de definitie van een recordtype een onderscheid per geval dat afhankelijk is van de discriminant:
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;
Maak vervolgens een doos voor bananen,
Box : Basket (Banana);
Het Box object heeft nu twee recordcomponenten naast zijn discriminant, Kind , namelijk Bunch_Size en Bunches_Per_Box .