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.

È stato utile?

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