ada
Tipi parametrizzati
Ricerca…
introduzione
Tutti i tipi compositi diversi dagli array possono avere discriminanti, che sono componenti con proprietà speciali. I discriminanti possono essere di tipo discreto o di accesso. In quest'ultimo caso il tipo di accesso può essere un tipo di accesso con nome o può essere anonimo. Una discriminante di un tipo di accesso anonimo è chiamata discriminante di accesso per analogia con un parametro di accesso.
Tipi di record discriminati
Nel caso di un tipo di record discriminato, alcuni componenti sono noti come discriminanti e i componenti rimanenti possono dipendere da questi. Le discriminanti possono essere pensate come parametrizzare il tipo e la sintassi rivela questa analogia. In questo esempio creiamo un tipo che fornisce una matrice quadrata con un parametro positivo come:
type Square(X: Positive) is
record
S: Matrix(1 .. X, 1 .. X);
end record;
Quindi per creare un quadrato di 3 per 3, chiama semplicemente il tipo quadrato in questo modo:
Sq: Square(3);
Strutture record varianti
Un discriminante di un tipo di record può influenzare la struttura degli oggetti. Una scelta di componenti può esistere in un oggetto in base al fatto che un discriminante aveva avuto un valore particolare quando l'oggetto è stato creato. Per supportare questa variazione, la definizione di un tipo di record include una distinzione per casi che dipendono dalla discriminante:
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;
Quindi per creare una scatola per le banane,
Box : Basket (Banana);
La Box oggetto ha ora due componenti di registrazione in aggiunta alla sua discriminante, Kind , cioè Bunch_Size e Bunches_Per_Box .