Ada 中的歧视记录是什么?

What are discriminated records in Ada?

我试图了解 Ada 中有哪些受歧视的记录,但无法在网上找到明确、准确的答案。

例如,是什么使它成为受歧视的记录:

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

判别式 Size 使 Discriminated_Record 成为判别记录。

它是一个判别式 type 因为它有一个判别式,它是一个判别式 record 因为它是一个记录。其他可以具有判别式的类型是任务类型和受保护类型。

对于一个判别对象,判别式只是另一个组成部分(除了不可变之外)。所以给出

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 相同)。