2016-04-08 6 views
1

ISO Pascalのセクションを理解しようとすると少し混乱します。フィールド名のないISO Pascalレコードの変形

文法はあなたがこれを行うことができます:

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

それを構築するために、あなたは:Case Boolean部分の目的は何でしょう:

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

私は理解していない1つの部分がありますか?私はあなたができることを理解していますcase MyVal: Boolean; MyValがフィールドセレクタになります。しかし、フィールドセレクタがない場合の目的は何ですか?また

、標準は言う:各変異体部分と

が 変異体部分が有するセレクタ型を指定された種類に関連するものとします。バリアント部分のバリアントセレクタにタグフィールドが含まれている場合、またはバリアント部分の各バリアントのcase-constant- リストに1つのcase-constantのみが含まれている場合、セレクタタイプは となります。タグタイプ、およびバリアントパートの各バリアントは、 バリアントのcase-constant-listのケース定数で示されるselectorタイプによって指定された値 に関連付けられます。それ以外の場合、バリアントパートが所有するセレクタタイプは、 がバリアントパートの各バリアントに対して正確に1つの値を持つように構成され、その他のバリアントはとなる新しい順序タイプでなければならず、それぞれのバリアントはそのタイプの別個の値。

私はかなりselector-typeが何であるかを理解していないと、なぜそれが新しいordinal-typeだろう。 selector-typecase Boolean ofのようなタイプではありませんか?そして、case-constantの1つだけを持つcase-constant-listのそれぞれは、それと何が関係していますか?

+0

は過去にcomp.lang.pascal.ansi - イソニュースグループは、ISOの詳細については、最高の源であった、そしてそれにもかかわらず、それが数年でアクションを見ていません。それ以外は、Gnu Pascal(GPC)のドキュメントを検索してみてください。 –

答えて

2

ここでは、バリアントレコードには2つの「個性」があります。ブール値は2つの可能な値を持つ型です。だから、それは論理的な選択のように思えました。しかし、ブール値である必要はありません。

同じ効果を得るには、整数やバイトなどの他の順序型を使用している可能性があります。たとえば:まだ潜伏者があるかもしれません

type RPoint = Record 
    Case Byte of 
    0: (X,Y,Z : Real); 
    1: (R,theta,phi : Real); 
end; 
+0

したがって、型は実際のランタイム表現には対応していませんか?それは単に異なる "人格"を定義するためのものですか? – refi64

+0

正確に。後でそれぞれのケースで使用されるもののタイプです。これはコンパイラにとってのみ役に立ちます。ランタイムストレージはありません。 – tonypdmtr

+0

もう1つ質問:「大文字と小文字を区別しない」という意味はどういう意味ですか?それとも無駄な「標準的な」ごみですか? – refi64

関連する問題