Pascal - warianty
Pascal obsługuje unikalny typ nazwanych wariantów pamięci. W zmiennej wariantowej można przypisać wartości dowolnego prostego typu. Typ wartości przechowywanej w wariancie jest określany tylko w czasie wykonywania. Prawie każdy typ prosty można przypisać do wariantów: typy porządkowe, typy łańcuchowe, typy int64.
Typy strukturalne, takie jak zbiory, rekordy, tablice, pliki, obiekty i klasy, nie są zgodne z przypisaniem z wariantem. Możesz także przypisać wskaźnik do wariantu.
Free Pascal obsługuje różne warianty.
Deklarowanie wariantu
Możesz zadeklarować typ wariantu jak każdy inny typ przy użyciu varsłowo kluczowe. Składnia deklarowania typu wariantu to -
var
v: variant;
Teraz ta zmienna wariantowa v może być przypisana do prawie wszystkich prostych typów, w tym typów wyliczeniowych i odwrotnie.
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;
Przykład
Poniższy przykład ilustruje koncepcję -
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.
Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -
Variant as Integer: 100
Variant as real: 234.345
Variant as Enumerated data: 0
Variant as AnsiString: I am an AnsiString