06.11.2011 1:46, Michael Van Canneyt пишет:
On Sat, 5 Nov 2011, Bernd wrote:
2011/10/25 <michael.vancann...@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@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).
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal