Я работаю с SysUtils.Format
и variant
значениями, и я обнаружил, что эта функция работает только в том случае, если строка формата %s
. Я проверил документацию о функции Format
, но не существует никакой ссылки на то, как обрабатываются варианты значений.
Рассмотрим это простое приложение:
{$APPTYPE CONSOLE}
uses
Variants,
SysUtils;
procedure TestFormat;
var
v : Variant;
begin
v:=100;
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %s',[v]));//ok
v:='100';
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %s',[v]));//ok
v:=100;
writeln(Format('The VarType of v is %s',[VarTypeAsText(VarType(v))]));
writeln(Format('The value of v is %d',[v]));//raise a EConvertError exception EConvertError: Format '%d' invalid or incompatible with argument
end;
begin
try
TestFormat;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
readln;
end.
Является ли это ошибкой или простым ограничением этой функции?
Я проверил это поведение в Delphi 5, Delphi 2007 и Delphi XE.