Конструкторы анонимных записей в Delphi
-
03-07-2019 - |
Вопрос
Можно ли использовать записи в качестве параметра метода и вызывать его без неявного объявления экземпляра указанной записи?
Я хотел бы иметь возможность писать такой код.
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.
Не связан с StackOverflow