我正在与SysUtils.Format http://docwiki.embarcadero.com/VCL/en/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 中检查了此行为。
这是功能的限制。在Delphi XE中,SysUtils中的相关部分从第10870行开始,如下所示:
@CvtVariant:
CMP CL,'S'
JNE @CvtError
对于任何变体参数都需要这样做。 CL 寄存器具有该特定参数的格式字符串所需的类型,对于与“S”不同的任何内容,都会引发异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)