Costruttori di record anonimi a delfi
-
03-07-2019 - |
Domanda
È possibile usare i record come parametro di metodo e chiamarlo senza dichiarare implicitamente un'istanza di detto record?
Vorrei poter scrivere codice in questo modo.
type
TRRec = record
ident : string;
classtype : TClass;
end;
procedure Foo(AClasses : array of TRRec);
quindi chiamando il metodo in questo modo o qualcosa di simile.
Foo([('Button1', TButton), ('Lable1', TLabel)]);
Sono ancora bloccato su Delphi 5 a proposito.
Soluzione
Sì. Quasi.
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)]);
Altri suggerimenti
È anche possibile lavorare con un array const, ma non è così flessibile come la soluzione data da " gangph " ;: (specialmente che devi indicare la dimensione ([0..1]) della matrice nella dichiarazione della matrice. I record sono anomali, la matrice no).
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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow