Delphi 中的匿名记录构造函数

3j86kqsm  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(111)

有没有可能使用记录作为方法参数,并且调用它而不隐式地声明所述记录的示例?
我希望能够写出这样的代码。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);

然后像这样调用方法或类似的东西。

Foo([('Button1', TButton), ('Lable1', TLabel)]);

顺便说一句,我还卡在 Delphi 5上。

k0pti3hp

k0pti3hp1#

是的。差不多了。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

function r(i: string; c: TClass): TRRec;
begin
  result.ident     := i;
  result.classtype := c;
end;

procedure Foo(AClasses : array of TRRec);
begin
  ;
end;

// ...
Foo([r('Button1', TButton), r('Lable1', TLabel)]);
cyvaqqii

cyvaqqii2#

也可以使用const数组,但它不如@dan-gph给出的解决方案灵活:(特别是你必须在数组声明中给出给予数组的大小([0.. 1])。记录是匿名的,数组不是)。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);
begin
end;

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton),
                                   (ident:'Lable1'; classtype:TLabel));

Begin
  Foo(tt);
end.

相关问题