Delphi 将常量传递给一个函数参数,该参数是一个开放的记录数组
我的记录定义如下:Delphi 将常量传递给一个函数参数,该参数是一个开放的记录数组,delphi,record,open-array-parameters,Delphi,Record,Open Array Parameters,我的记录定义如下: TRec = record S: string; I: Integer; end; const Rec: TRec = (S:'Test'; I:123); 我可以像这样初始化此记录类型的常量: TRec = record S: string; I: Integer; end; const Rec: TRec = (S:'Test'; I:123); 现在我有了一个函数,它接受这种记录类型的开放数组: function Test(AParams
TRec = record
S: string;
I: Integer;
end;
const
Rec: TRec = (S:'Test'; I:123);
我可以像这样初始化此记录类型的常量:
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)]);
这是行不通的。我应该使用其他方法吗?向记录类型添加一个构造函数,该构造函数接受所需的参数
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;
是的,这是众所周知的决定,谢谢。我希望这能成为现实easier@RemyLebeau以前的版本需要一个带有符合此构造函数的方法的实用程序类。