Что такое дискриминированные записи в Аде? - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь понять, какие дискриминированные записи есть в Аде, но не могу найти четкий, точный ответ онлайн.

Например, что делает эту дискриминированную запись:

type Discriminated_Record (Size : Natural) is 
    record
       A : String (1 .. Size);
    end record;

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Это дискриминируемый тип , потому что у него есть дискриминант, и это дискриминированная запись , потому что это запись.Другими типами, которые могут иметь дискриминанты, являются задачи и защищенные типы.

Для дискриминируемого объекта дискриминант - это просто еще один компонент (кроме того, что он неизменен).Таким образом, с учетом

type Buffer(Size : Buffer_Size := 100)  is
   record
      Pos   : Buffer_Size := 0;
      Value : String(1 .. Size);
   end record;

B : Buffer (Size => 50);

вы можете получить доступ к B.Size (который будет таким же, как B.Value’Length).

0 голосов
/ 11 июня 2018

Дискриминант, Size, делает Discriminated_Record дискриминированной записью.

...