Variant ======= The variant "magic" datatype can store most base types. ``` var v: Variant; begin WriteLn('Should be unassigned: ', not v.IsAssigned()); WriteLn(); v := 'I am a string'; Writeln('Now should *not* be unassigned: ', v.IsAssigned()); WriteLn('And should be string:'); WriteLn(v.VarType, ' -> ', v); WriteLn(); v := Int64(123); WriteLn('Now should be Int64:'); WriteLn(v.VarType, ' -> ', v); WriteLn(); v := 0.123456; WriteLn('Now should be Double:'); WriteLn(v.VarType, ' -> ', v); end; ``` Note:: If curious to how the Variant datatype works, internally it's a record: ``` // pseudo code type InternalVariantData = record VarType: EVariantType; Value: array[0..SizeOf(LargestDataTypeVariantCanStore)] of Byte; end; ``` ----- Variant.VarType --------------- > function Variant.VarType: EVariantVarType; Returns the variants var type. Example:: if (v.VarType = EVariantVarType.Int32) then WriteLn('Variant contains a Int32'); ----- Variant.IsNumeric ----------------- > function Variant.IsNumeric: Boolean; Is integer or float? ----- Variant.IsString ---------------- > function Variant.IsString: Boolean; ----- Variant.IsInteger ----------------- > function Variant.IsInteger: Boolean; ----- Variant.IsFloat --------------- > function Variant.IsFloat: Boolean; ----- Variant.IsBoolean ----------------- > function Variant.IsBoolean: Boolean; ----- Variant.IsVariant ----------------- > function Variant.IsVariant: Boolean; The variant holds another variant! ----- Variant.IsAssigned ------------------ > function Variant.IsAssigned: Boolean; Example: ``` if v.IsAssigned() then WriteLn('Variant HAS been assigned to') else WriteLn('The variant has NOT been assigned to'); ``` ----- Variant.IsNull -------------- > function Variant.IsNull: Boolean; ----- Variant.NULL ------------ > function Variant.NULL: Variant; static; Static method that returns a null variant variable. Example: ``` v := Variant.NULL; ```