Pascal - 变体

Pascal 支持一种名为变体的独特存储类型。 您可以在变体变量中分配任何简单类型的值。 存储在变体中的值的类型仅在运行时确定。 几乎任何简单类型都可以分配给变体:序数类型、字符串类型、int64 类型。

结构化类型(例如集合、记录、数组、文件、对象和类)与变体的赋值不兼容。 您还可以将指针分配给变体。

Free Pascal 支持变体。

声明变体

您可以使用 var 关键字像任何其他类型一样声明变体类型。 声明变体类型的语法是 −

var
   v: variant;

现在,这个变体变量 v 可以分配给几乎所有简单类型,包括枚举类型,反之亦然。

type  
   color = (red, black, white);  
var  
   v : variant;  
   i : integer;  
   b : byte;  
   w : word;  
   q : int64;  
   e : extended;  
   d : double;  
   en : color;  
   as : ansistring;  
   ws : widestring;  

begin  
   v := i;  
   v := b;  
   v := w;  
   v := q;  
   v := e;  
   v := en;  
   v := d:  
   v := as;  
   v := ws;  
end;

示例

以下示例将说明这个概念 −

Program exVariant;

uses variants;
type
   color = (red, black, white);

var
   v : variant;
   i : integer;
   r: real;
   c : color;
   as : ansistring;


begin
   i := 100;
   v:= i;
   writeln('Variant as Integer: ', v);

   r:= 234.345;
   v:= r;
   writeln('Variant as real: ', v);

   c := red;
   v := c;
   writeln('Variant as Enumerated data: ', v);

   as:= ' I am an AnsiString';
   v:= as;
   writeln('Variant as AnsiString: ', v);
end.

当上面的代码被编译并执行时,会产生以下结果 −

Variant as Integer: 100
Variant as real: 234.345
Variant as Enumerated data: 0
Variant as AnsiString: I am an AnsiString