没有字段名

时间:2016-04-08 16:05:45

标签: record pascal variant

我试图想象一下ISO Pascal的一部分。

语法允许你这样做:

type RPoint = Record
  Case Boolean of
    False : (X,Y,Z : Real);
    True : (R,theta,phi : Real);
end;

要构建它,你可以:

var p: RPoint;
begin
  p.x := 1;
end.

有一部分我不明白:Case Boolean部分的目的是什么?我知道你可以做case MyVal: Boolean;然后MyVal成为字段选择器。但是,没有字段选择器的目的是什么,只是一种类型?

此外,标准说:

  

每个变体部分应与一个指定选择器类型的类型相关联   变体部分。如果variant-part的variant-selector包含tag-field,或者case-constant-   变体部分的每个变体的列表只包含一个case-constant,然后是selector-type   用标记类型表示,变体部分的每个变体应与那些相关联   由case-constant-list的case-constants表示的selector-type指定的值   变种。否则,变体部分拥有的选择器类型应该是新的序数类型   构造为对变体部分的每个变体只有一个值,而没有其他变体   每个此类变体应与该类型的不同值相关联。

我不太清楚selector-type是什么以及为什么它会成为新ordinal-typeselector-type的{​​{1}}类似于case Boolean of中的类型吗?每个case-constant-list只有一个case-constant与它有什么关系?

1 个答案:

答案 0 :(得分:2)

这里你的变体记录有两个可能的“个性”。 Boolean是具有两个可能值的类型。所以,这似乎是一个合乎逻辑的选择。但是,它不必是布尔值。

您可以使用其他一些序数类型(如Integer或Byte)来获得相同的效果。例如:

GridBagLayout