[fpc-pascal] Re: Delphi's anonymous functions in Free Pascal

Alexander Shishkin alexvins at mail.ru
Sat Nov 5 22:58:15 CET 2011


06.11.2011 1:46, Michael Van Canneyt пишет:
>
>
> On Sat, 5 Nov 2011, Bernd wrote:
>
>> 2011/10/25 <michael.vancanneyt at wisa.be>:
>>
>>>> targethread.queue(
>>>>  procedure(targetobject:ttargetobject;a:integer;b:someobject;c:string)
>>>>             begin
>>>>               targetobject.destinationprocedure(a,b,c);
>>>>             end;
>>>>
>>>> Note how common this looks compared to the original.
>>>
>>> One point is that you could do the above with a local (and named)
>>> procedure
>>> as well, and still have all the context. At the very least you would
>>> not be
>>> raping pascal's readability by putting a
>>> complete procedure declaration inside a code block.
>>
>> How would you preserve the context without finding some place
>> somewhere (on the heap) to store the current values of a, b, and c?
>>
>
> Procedure SomeOuter;
>
> Var
> d,e,f : SomeType;
>
> Procedure
> SomeInner(targetobject:ttargetobject;a:integer;b:someobject;c:string)
>    begin
>      targetobject.destinationprocedure(a,b,c);
>    end;
>
> begin
> Targethread.queue(@SomeInner(aobject,d,e,f));
> end;
>
> No difference with 'closure', except more readable.
>
> Michael.
>
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Closures can be returned as a function result but nested procedure not 
(more strictly, this can be complied but will not work because of 
lifetime of nested procedure).



More information about the fpc-pascal mailing list