Constructores de discos anónimos en delphi.
-
03-07-2019 - |
Pregunta
¿Es posible usar los registros como un parámetro del método, y llamarlo sin declarar implícitamente una instancia de dicho registro?
Me gustaría poder escribir código como este.
type
TRRec = record
ident : string;
classtype : TClass;
end;
procedure Foo(AClasses : array of TRRec);
luego llama al método como este o algo similar.
Foo([('Button1', TButton), ('Lable1', TLabel)]);
Por cierto, todavía estoy atrapado en Delphi 5.
Solución
Sí. Casi.
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)]);
Otros consejos
También es posible trabajar con una matriz de const, pero no es tan flexible como la solución dada por " gangph " ;: (especialmente que tiene que indicar el tamaño ([0..1]) de la matriz en la declaración de la matriz. Los registros son anómalos, la matriz no lo es).
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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow