Skip to content

Instantly share code, notes, and snippets.

@kevroletin
Created March 2, 2013 13:58

Revisions

  1. kevroletin created this gist Mar 2, 2013.
    45 changes: 45 additions & 0 deletions gistfile1.pas
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    program capture_by_value;

    {$APPTYPE CONSOLE}

    {$R *.res}

    uses
    System.SysUtils;

    type
    TProc = reference to procedure;
    TFunct = reference to function: TProc;

    var
    procArr: array[1..5] of TProc;

    procedure HumanFactory;
    function Call(funct: TFunct): TProc;
    begin
    Result := funct();
    end;

    var i: Integer;
    begin
    for i := 1 to 5 do
    begin
    procArr[i] := Call(
    function : TProc
    var inner: Integer;
    begin
    inner := i;
    Result := procedure begin Writeln(inner); end;
    end
    );
    end;
    end;

    var i: Integer;
    begin
    HumanFactory();
    for i := 1 to 5 do begin
    procArr[i]();
    end;
    Readln;
    end.