ada
Typy sparametryzowane
Szukaj…
Wprowadzenie
Wszystkie typy kompozytów inne niż tablice mogą mieć dyskryminatory, które są komponentami o specjalnych właściwościach. Dyskryminatory mogą być typu dyskretnego lub typu dostępu. W tym ostatnim przypadku typ dostępu może być nazwanym typem dostępu lub może być anonimowy. Dyskryminujący o anonimowym typie dostępu nazywany jest dyskryminującym dostępem przez analogię z parametrem dostępu.
Dyskryminowane typy rekordów
W przypadku dyskryminowanego typu rekordu niektóre komponenty są znane jako dyskryminujące, a pozostałe komponenty mogą zależeć od nich. Dyskryminatory można uznać za parametryzujące typ, a składnia ujawnia tę analogię. W tym przykładzie tworzymy typ, który zapewnia kwadratową macierz z dodatnim parametrem:
type Square(X: Positive) is
record
S: Matrix(1 .. X, 1 .. X);
end record;
Następnie, aby utworzyć kwadrat o wymiarach 3 na 3, po prostu wywołaj kwadrat:
Sq: Square(3);
Warianty struktur rekordów
Dyskryminator typu rekordu może wpływać na strukturę obiektów. Wybór składników może istnieć w obiekcie, ponieważ dyskryminator miał szczególną wartość podczas tworzenia obiektu. Aby wesprzeć tę odmianę, definicja typu rekordu zawiera rozróżnienie według przypadków, które zależą od dyskryminatora:
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;
Następnie, aby stworzyć pudełko na banany,
Box : Basket (Banana);
Obiekt Box ma teraz dwa komponenty zapisu oprócz swojego dyskryminatora, Kind , mianowicie Bunch_Size i Bunches_Per_Box .