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.

¿Fue útil?

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
scroll top