수색…


소개

배열이 아닌 모든 복합 유형에는 특수 특성이있는 구성 요소 인 판별자가 포함될 수 있습니다. 판별은 개별 유형 또는 액세스 유형 일 수 있습니다. 후자의 경우 액세스 유형은 명명 된 액세스 유형이거나 익명 일 수 있습니다. 익명 액세스 유형의 판별자를 액세스 매개 변수와 유추하여 액세스 판별 자라고합니다.

판별 된 레코드 유형

식별 된 레코드 유형의 경우, 구성 요소 중 일부는 판별 자라고하고 나머지 구성 요소는 판별 유형에 따라 달라질 수 있습니다. 판별자는 유형을 매개 변수화하는 것으로 생각할 수 있으며 구문은 이러한 유추를 나타냅니다. 이 예제에서는 정방향 행렬에 양수를 매개 변수로 제공하는 형식을 만듭니다.

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

그런 다음 3 by 3의 사각형을 만들려면 다음과 같이 yout 유형의 Square를 호출하십시오.

Sq: Square(3);

변형 레코드 구조

레코드 유형의 판별자는 오브젝트의 구조에 영향을 줄 수 있습니다. 개체가 생성 될 때 discriminant가 특정 값을 가졌기 때문에 구성 요소를 선택할 수 있습니다. 이 변형을 지원하기 위해 레코드 유형의 정의에는 판별에 따라 달라지는 사례가 있습니다.

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 객체에는 이제 Bunch_SizeBunches_Per_Box 와 같은 Bunch_Size Kind 이외에 두 개의 레코드 구성 요소가 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow