John Nagle <[EMAIL PROTECTED]> wrote: > Most of the examples given here are kind of silly, but closures have > real uses. I used one today in Javascript because I was writing an > AJAX application, and I was using an API, the standard XMLHttpRequestObject, > which required a callback function with no arguments. A closure allowed > the code to pass relevant information with the callback function, which > would be called when a request to the server completed. A global > variable wouldn't have worked, because multiple instances of the object > making the callback are possible.
As another example, from a large C++ project I'm currently working on, we use closures in many places to push actions onto queues. One kind of queue we have is a timed queue. You push a closure and a time onto it, and it executes the closure at the appointed time. Another kind of queue is for inter-thread communication. You push a closure onto a thread's input queue when you want it to do something. The thread just keeps popping closures off the other end of the queue and executing them. Think of a closure as a way of saying "do this". You can say, "At 5:00, do this", or "Do this as soon as you get a chance". # pseudocode class husband (spouse): def pickUpGroceries(): etc def addToQueue(): etc c = makeClosure (husband.pickUpGroceries, [milk, eggs, bread]) h = husband() h.addToQueue (c) -- http://mail.python.org/mailman/listinfo/python-list