2012-03-23 14 views

Antwort

1

Dies funktioniert (siehe Syntax Kommentare in Code):

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. 
+0

Während dies gut ist, was es ist nicht gefragt wurde. (Nicht downvoting, BTW.) Das Poster fragte, ob sie "Procedure run" zu "Rec.p" zuweisen und dann 'Rec.run' verwenden könnten - Ihr Code zeigt mit' Rec.p', was anders ist als gefragt . –

+0

@KenWhite, Sie könnten Recht haben, aber mein Beispiel wird das OP rufen Sie die run-Prozedur durch die const Rec Rec. –

+0

Richtig, aber das wurde nicht gefragt, was war "Es ist möglich, später zu laufen: Rec [0] .run;", was * nicht * möglich ist. :) Egal - das OP scheint zu glauben, dass deine Lösung funktioniert. (Löschen meiner Antwort und Hochladen Ihrer.) –