Clemens Hintze responds: >> Is this the right way to fix the problem? It apparently imposes >> some overhead in that there is a binding stored with each proc, > >Yes! But the binding is stored anyway! Blocks will refer to the parent >context, whether you use it or not, AFAIK! The other overhead is the binding look-up every time through the loop. If there were a way of indicating that I wanted the look-up done just once, when the proc was defined, then the proc would execute more quickly when it was called. This could have a non-trivial impact if it were in a tight loop. >> and a binding resolution occurs each time the proc is called. I >> think I'd be happier to have a way of specifying that I want the >> _value_ of "v", analogous to the #{} notation in double-quoted >> strings. Is there a straightforward way to fix the code that >> uses a <for> loop, rather than an <each> iterator? I don't need >> it, but it would be interesting to know of alternate solutions. > >POLS. As you already mentioned: use #{} ;-) > > procs = [] > for v in [1, 2] > procs << eval("proc { #{v} }") > end > procs.collect { |p| p.call } -> [1, 2] The problem is that this only works if v's string form is evaluatable. In my example, v takes in Fixnum values, so your solution works fine. But in the general case (say, when v holds Method objects), using eval won't work. -- Steven "That's so deep, I'm getting the bends.... If you want me, I'll be in the decompression chamber."