Yet another reminder why Lisp scoping rules and my feeble lexical brain don't mesh. I have no opinion as to why or if it's a good thing (Tm) but it'll burn us old school non Lispers.
On Mon, 2009-07-27 at 05:15 -0400, MenTaLguY wrote: > I wasn't terribly clear. Let me rephrase -- if you do this: > > urls.each do |url| > link url, :click => Proc.new { window { image url } } > end > > Then every link will open the same image url (since all the created > Procs reference the same variable, which ends up with the same final > value). However, if you do this: > > def make_image_callback(url) > Proc.new { window { image url } } > end > > image_urls.each do |image_url| > link image_url, :click => make_image_callback(image_url) > end > > Then the links should open the correct images, since each call to > make_image_callback establishes up a separate context for a Proc inside > to capture, rather than all the Procs sharing the same context and > variables. > > You could also do the call to link itself inside the helper method (as I > did in my earlier email), but you don't need to. > > -mental >