将常量传递给作为打开的记录数组的函数参数

时间:2017-03-17 10:14:48

标签: delphi record open-array-parameters

我有一个像这样定义的记录:

TRec = record
  S: string;
  I: Integer;
end;

我可以像这样初始化此记录类型的常量:

const
  Rec: TRec = (S:'Test'; I:123);

现在我有一个带有此记录类型的开放数组的函数:

function Test(AParams: array of TRec);

我可以使用与常量声明类似的语法来调用此函数吗?

Test([(S:'S1'; I:1), (S:'S2'; I:2)]);

这不起作用。我应该用别的吗?

1 个答案:

答案 0 :(得分:3)

向记录类型添加构造函数,该类型将获取所需的参数。

TRec = record
  s : string;
  i : integer;
  constructor create( s_ : string; i_: integer );
end;

constructor TRec.create( s_ : string; i_: integer );
begin
  s := s_;
  i := i_;
end;

procedure test( recs_ : array of TRec );
var
  i : Integer;
  rec : TRec;
begin
  for i := 0 to high(recs_) do
    rec := recs_[i];
end;

procedure TForm1.Button1Click( sender_ : TObject );
begin
  test( [TRec.create('1',1), TRec.create('2',2)] );
end;

正如Remy Lebeau所反映的,它只适用于Delphi 2006或更新版本。如果您有一个较旧的IDE,您应该使用一个方法(以及其他方法)创建一个实用程序类,该方法符合上面的记录构造函数:

TRecUtility = class
  public
    class function createRecord( s_ : string; i_: integer ) : TRec;
    //... other utility methods
end;

procedure foo;
begin
  test( [TRecUtility.createRec('1',1), TRec.createRec('2',2)] ); 
end;