array of const

  1. {A common error when working with PChars is to store a local variable in a data structure, or return it as a value. When your routine ends, the PChar disappears because it is a pointer to memory, and not a reference counted copy of the string. For example:}
  2. function title(n: Integer): PChar;
  3. var
  4.   s: string;
  5. begin
  6.   s := Format('title - %d', [n]);
  7.   Result := PChar(s); // DON'T DO THIS
  8. end;
  9. {This example returns a pointer to string data that is freed when the title function returns.}
  10. procedure TForm1.MyDataAfterDelete(DataSet: TDataSet);
  11. begin
  12.   StatusBar1.SimpleText := Format('There are now %d records in the table', [DataSet.RecordCount]);
  13. end;

format 函数的原型是 function Format(const Format: string; const Args: array of const): string; overload;

第二个参数的类型是array of const,不知道是什么类型,搜了下:

 

变体开放数组参数  
     
   
  变体开发数组参数允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的例程,需要指定array   of   const作为参数类型。如,  
   
  procedure   DoSomething(A:   array   of   const);  
   
  这里声明了一个叫做DoSomething的过程,该过程可以操作不同种类的数组。  
   
  array   of   const结构等价于array   of   TVarRec。TVarRec,在单元System中声明,用于表示一个记录,记录中有一个可以保存多种值(整数、布尔、字符、实数、串、指针、类、类引用、接口、变体等)的变体部分。TVarRec中的VType字段表示数组中每个元素的类型。一些类型作为指针传递而不传递值;特别是长串,作为指针传递并且必需转换为string类型。  
   
  下面的例子在函数中使用了变体开放数组参数,该函数对接受的每个元素创建一个串表示法,最后连接成一个串。该函数中调用的串处理例程都定义在SysUtils单元中。  
   
  function   MakeStr(const   Args:   array   of   const):   string;  
   
  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;  
   
  可以用一个开放数组构造器(见开放数组构造器)来调用该函数。例如:  
   
  MakeStr(['test',   100,   '   ',   True,   3.14159,   TForm])  
   
  上面的调用将返回串   “test100   T3.14159TForm"。  

也就是说[]符号就可以将任何可以format类型的变量括起来直接在format中使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值