const
BoolChars: array[Boolean] of Char = ('F', 'T');
var
I: Integer;
begin
Result := '';
for I := 0 to High(Args) do
with Args[I] do
case VType of
vtInteger: Result := Result + IntToStr(VInteger);
vtBoolean: Result := Result + BoolChars[VBoolean];
vtChar:Result := Result + VChar;
vtExtended: Result := Result + FloatToStr(VExtended^);
vtString:Result := Result + VString^;
vtPChar:Result := Result + VPChar;
vtObject:Result := Result + VObject.ClassName;
vtClass:Result := Result + VClass.ClassName;
vtAnsiString: Result := Result + string(VAnsiString);
vtCurrency: Result := Result + CurrToStr(VCurrency^);
vtVariant: Result := Result + string(VVariant^);
vtInt64:Result := Result + IntToStr(VInt64^);
end;
end;
我们可以传递一个开放数组构造器来调用这个函数(参考Open array constructors)。比如,
MakeStr(['test', 100, ' ', True, 3.14159, TForm])
返回字符串“test100 T3.14159TForm”。
Default parameters(默认参数)
Default parameters(默认参数)
在过程头或函数头中,你可以指定默认的参数值。默认值只允许出现在指定类型的常量参数和数值参数中。要提供一个默认值,在参数声明中以等号和一个常量表达式(和参数的类型赋值兼容)作为结束。 比如,给定下面的声明
procedure FillArray(A: array of Integer; Value: Integer = 0);
下面的过程调用是相等的。
FillArray(MyArray);
FillArray(MyArray, 0);
一个多参数声明不能指定一个默认值,这样,虽然
- 92 -
Procedures and functions
function MyFunction(X: Real = 3.5; Y: Real = 3.5): Real;
是合法的,但
function MyFunction(X, Y: Real = 3.5): Real; // 语法错误
是非法的。
有默认值的参数必须出现在参数列表的最后,也就是说,在声明了一个有默认值的参数后,它后面的所有参数也必须有默认值。所以,下面的声明是非法的。
procedure MyProcedure(I: Integer = 1; S: string); // 语法错误
在过程类型中指定的默认值会覆盖实际例程中指定的默认值。所以,给出下面的声明
type TResizer = function(X: Real; Y: Real = 1.0): Real;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-66.html
本职是作家