Паскаль - Варианты
Паскаль поддерживает уникальный тип хранилища, именуемый вариантами. Вы можете присвоить любой простой тип значений переменной варианта. Тип значения, хранящегося в варианте, определяется только во время выполнения. Вариантам можно отнести практически любой простой тип: порядковые типы, строковые типы, типы 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