サーチ…


前書き

配列以外のすべての複合型には、特別なプロパティを持つコンポーネントである判別式を含めることができます。判別式は、離散型でもアクセス型でも構いません。後者の場合、アクセスタイプは名前付きアクセスタイプでも匿名でもかまいません。匿名アクセス型の判別式は、アクセスパラメータとの類推によってアクセス判別式と呼ばれます。

差別化されたレコードタイプ

識別されたレコードタイプの場合、コンポーネントのいくつかは判別式として知られており、残りのコンポーネントはこれらに依存する可能性があります。判別式は型をパラメータ化するものと考えることができ、構文はこの類推を明らかにする。この例では、パラメータとして正の正方行列を提供する型を作成します。

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

次に、3 by 3の正方形を作成するには、このようにSquareをタイプします。

Sq: Square(3);

バリアントレコード構造

レコードタイプの判別式は、オブジェクトの構造に影響を与える可能性があります。オブジェクトの作成時に、判別式が特定の値を持つため、オブジェクトの中にコンポーネントの選択肢が存在することがあります。このバリエーションをサポートするために、レコードタイプの定義には、判別式に依存するケースによる区別が含まれます。

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;

次に、バナナ用の箱を作成するには、

Box : Basket (Banana);

Boxオブジェクトには、その判別式Kindに加えて、 Bunch_SizeBunches_Per_Boxという2つのレコードコンポーネントが追加されました。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow