Was versteht man unter variante Records ? Was ist der Unterschied zu normalen Records?
Ich finde leider keine Definitionen im Netz.
Würde mich über eine schnelle Antwort freuen.
Variante Records
-
-
Der Begriff scheint vor allem in der Pascal-Welt gebräuchlich. Es geht dabei um Records (structs in C), die unterschiedliche Formen annehmen können. D.h. du hast einen Recordtyp, aber abhängig von irgendeinem Flag nimmt er unterschiedliche Formen an. Ein gegoogeltes Beispiel in Pascal:
Code
Alles anzeigentype TPoint = record X: Longint; Y: Longint; end; TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end;
Ein TRect hat einen Flag, der angibt, ob die Koordinaten der Eckpunkte einzeln gespeichert sind oder zu Punkten zusammengefasst. Die beiden Darstellungsformen überlappen sich üblicherweise im Speicher.Das macht in C sowas:
Code
Alles anzeigenstruct point { long x; long y; }; struct trect { int flag; union { struct coordinates { int top; int left; int bottom; int right; }; struct corners { struct point topleft; struct point bottomright; }; } rect; };
In Haskell wäre es:
Codetype Point = (Integer, Integer) data TRect = Coordinates Integer Integer Integer Integer | Corners Point Point
Der Witz an der Sache ist, daß du eben je nach Flag (bzw. Typkonstruktor in Haskell) unterschiedliche Strukturen hast, aber nur einen gemeinsamen "Obertyp". Damit kannst du verwandte, aber verschiedene Strukturen z.B. in einer Liste speichern.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!