Sök…


Introduktion

Alla andra sammansatta typer än matriser kan ha diskriminanter, som är komponenter med speciella egenskaper. Diskriminanter kan vara av diskret typ eller åtkomsttyp. I det senare fallet kan åtkomsttypen vara en benämnd åtkomsttyp eller den kan vara anonym. En diskriminant av en anonym tillgångstyp kallas en åtkomstdiskriminant analogt med en åtkomstparameter.

Diskriminerade posttyper

När det gäller en diskriminerad inspelningstyp är vissa av komponenterna kända som diskriminerande och de återstående komponenterna kan bero på dessa. Diskriminanterna kan betraktas som att parametrera typen och syntaxen avslöjar denna analogi. I det här exemplet skapar vi en typ som ger en kvadratmatris med en positiv som parameter:

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

För att skapa en kvadrat på 3 av 3, ring bara yout typ Square så här:

Sq: Square(3);

Variantrekordstrukturer

En diskriminant av en inspelningstyp kan påverka föremålens struktur. Ett val av komponenter kan existera i ett objekt, eftersom en diskriminant hade haft ett särskilt värde när objektet skapades. För att stödja denna variation inkluderar en posttyps definition en åtskillnad efter fall som beror på diskriminerande:

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;

För att skapa en låda för bananer,

Box : Basket (Banana);

Box objektet har nu två skivkomponenter utöver det diskriminerande, Kind , nämligen Bunch_Size och Bunches_Per_Box .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow