Вопрос

Можно ли использовать записи в качестве параметра метода и вызывать его без неявного объявления экземпляра указанной записи?

Я хотел бы иметь возможность писать такой код.

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

procedure Foo(AClasses : array of TRRec);

затем вызываем такой метод или что-то подобное.

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

Кстати, я все еще застрял на Delphi 5.

Это было полезно?

Решение

Да.Почти.

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)]);

Другие советы

Можно также работать с массивом const, но он не настолько гибок, как решение, предоставленное " gangph " ;: (особенно если вы должны указать размер ([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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top