
On Tue, 13 Nov 2001 13:09:17 +0000, Jorge Adriano wrote:
Yeap, that's exactly what I thought (I think - what exactly is a 'closure'? don't know if this question is off topic in here or not, anyway some pointers to some definition on the web will do :)
:) I'll try to tackle this one. I have always had trouble understanding this concept, and I haven't been able to find a good definition or description on the web. It's always assumed you know what's being talked about, for some reason. A closure is a function and the context in which it runs. It's used mainly in those languages where functions can be passed around as values. Another way to see it, the C/C++ way, is that a closure is a function together with some contextual data attached to it. I guess the best way to describe it is by using an example in pseudocode: function MakeIncrementer (increment: int) : (function(int): int) { function Incrementer(num: int) : int { return num + increment; } return Incrementer; } Ok. MakeIncrementer returns a function that maps ints to ints, by adding an arbitrary value passed in to MakeIncrementer by its caller. You can use it to make functions that increment numbers by any amount you wish. Evidently, MakeIncrementer can return an infinite amount of different functions. This is made possible by returning a context together with that function. For example, you could manually implement this in C++ in this manner (returning a function object): --- struct IncrementerFuncObj { int increment; int operator()(int num) const { return num + increment; } }; IncrementerFuncObj MakeIncrementer(int increment) { IncrementerFuncObj result; result.increment = increment; return result; } --- And then use it as such: --- IncrementerFuncObj incrementer = MakeIncrementer(3); int five = incrementer(2); --- You can see it also as something similar to function pointers in C and C++, only a bit extended with a context that can be implemented as an object (like above) or an extra pointer that must be passed around. If I got anything wrong, or if I missed anything, I'd like to hear about it :)
P.S.: I for one, would rather have 'reply' directing our messages to the mailing list. My apologies to John Hughes for the personal reply.
Same here. Salutaciones, JCAB email: jcab@roningames.com ICQ: 101728263 The Rumblings are back: http://www.JCABs-Rumblings.com