Suche…


Einführung

Alle zusammengesetzten Typen außer Arrays können Diskriminanten aufweisen, dh Komponenten mit besonderen Eigenschaften. Diskriminanten können diskrete Typen oder Zugriffstypen sein. Im letzteren Fall kann der Zugriffstyp ein benannter Zugriffstyp oder anonym sein. Eine Diskriminante eines anonymen Zugriffstyps wird in Analogie zu einem Zugriffsparameter als Zugriffsdiskriminante bezeichnet.

Diskriminierte Datensatztypen

Im Falle eines diskriminierten Datensatztyps sind einige der Komponenten als Diskriminanten bekannt und die übrigen Komponenten können von diesen abhängen. Man kann sich vorstellen, dass die Diskriminanten den Typ parametrisieren, und die Syntax offenbart diese Analogie. In diesem Beispiel erstellen wir einen Typ, der eine quadratische Matrix mit einem positiven as-Parameter bereitstellt:

type Square(X: Positive) is
    record
        S: Matrix(1 .. X, 1 .. X);
    end record;

Um ein Quadrat von 3 x 3 zu erstellen, rufen Sie einfach den Typ Square wie folgt auf:

Sq: Square(3);

Variantensatzstrukturen

Eine Diskriminante eines Datensatztyps kann die Struktur von Objekten beeinflussen. Eine Auswahl von Komponenten kann in einem Objekt vorhanden sein, da ein Diskriminant bei der Erstellung des Objekts einen bestimmten Wert hatte. Um diese Variation zu unterstützen, umfasst die Definition eines Datensatztyps eine Unterscheidung nach Fällen, die von der Diskriminanz abhängen:

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;

Dann eine Box für Bananen erstellen,

Box : Basket (Banana);

Das Box Objekt hat jetzt zusätzlich zu seiner Diskriminante Kind zwei Datensatzkomponenten, nämlich Bunch_Size und Bunches_Per_Box .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow