Как определить и запустить процедуру / функцию, используя запись? - PullRequest
0 голосов
/ 24 марта 2012

Я хочу определить запись с процедурой или функцией.Можете ли вы помочь с синтаксисом?

Type TRec = record
 s: string;
 p: procedure;
end;

procedure run;

Const
  Rec: TRec = ('',run);

procedure run;
begin
end;

Можно запустить позже:

Rec[0].run;

?

1 Ответ

1 голос
/ 24 марта 2012

Это работает (см. Синтаксические комментарии в коде):

Type
  TRec = record
    s: string;
    p: procedure; // As Ken pointed out, better define a procedural type:
                  //  type TMyProc = procedure; and declare p : TMyProc;
  end;

procedure run; forward;  // The forward is needed here.
                         // If the procedure run was declared in the interface
                         // section of a unit, the forward directive should not be here.

Const
  Rec: TRec = (s:''; p:run);  // The const record is predefined by the compiler.

procedure run;
begin
  WriteLn('Test');
end;

begin
  Rec.p;  // Rec.run will not work since run is not a declared member of TRec.
          // The array index (Rec[0]) is not applicable here since Rec is not declared as an array.
  ReadLn;
end.
...