[fpc-pascal] Case in Record

Anton Tichawa anton.tichawa at chello.at
Tue Oct 6 19:16:31 CEST 2009


On Tue, 2009-10-06 at 23:37 +0800, 章宏九 wrote:
> Thank you. I saw all the examples you gave, but I still cannot master
> how to use a variant record without a specified tag.
> 
> For example:
> type
>   TShapeList = (Rectangle, Triangle, Circle, Ellipse, Other);
>   TFigure = record
>     case TShapeList of
>       Rectangle: (Height, Width: Real);
>       Triangle: (Side1, Side2, Angle: Real);
>       Circle: (Radius: Real);
>       Ellipse, Other: ();
>   end;
> var
>   Figure1: TFigure;
> 

AFAIK there has to be some fixed part before the variant, e. g.

TFigure = record
    name: string;
    case TShapeList of
      Rectangle: (Height, Width: Real);
      Triangle: (Side1, Side2, Angle: Real);
      Circle: (Radius: Real);
      Ellipse, Other: ();
  end;

The program could then determine from the contents of the "name" field
which variant is used in a certain instance. This saves memory ("TShapeList"
has no memory reserved at run time), but the program is responsible
to correctly identify the variant using the "name" field.

Anton





More information about the fpc-pascal mailing list