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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow