On Sunday 23 November 2003 11:13 pm, Mathieu Bouchard wrote:
> On Mon, 24 Nov 2003, T. Onoma wrote:
> > > I expect this code to produce n distinct counters that will each
> > > produce their own independent sequence 1,2,3,4,5,... when called
> > > repeatedly. If it becomes impossible to do this anymore, then I won't
> > > be able to honestly say that Ruby really supports closures.
> >
> > Hmm...there would have to be an exception made for lambdas. Another
> > minus.
>
> what's the difference between a lambda/proc and a block?

That was the very first thing that I did not understood about Ruby, and still 
do not. Why are blocks and lambdas (and maybe methods for that matter) 
treated so distinctly? (In fact, you can still see the chicken scratch on 
page 10 of my Pickaxe.)

Take the def statement for example, why the odd sugar?: def blocky(x,y,&z). 
why not def blocky(x,y){z}? But then & isn't exactly just sugar. Is it? And I 
still get confused: when do I need the & in my method? And so on. No, unless 
there's some subtle aspect to this I do not understand, it would be much more 
intuitive if blocks were just treated as Proc/Lambda arguments that happened 
to have a special outside of ( ) notation.

I've also wished that Proc/Lambdas had there own unique delimiteres and not 
shared them with hashes. (Couldn't hashes have shared delimiters with array 
instead? The => gives them away, after all.) It would have simplified the 
symbol sematics.

> BTW it's impossible for a method that receive a blocks to pass it to
> another method without turning it into a proc/lambda (using the &
> prefixes), so it makes distinctions between lambda/proc and block rather
> undesirable, as there are some techniques that rely on passing blocks
> around, and can't work if it involves a difference of behaviour between
> "real block" and "block that was converted from a proc that was converted
> from a block".
>
> So I'm not sure how that exception would work at all, if an exception were
> to be applied...

Now we know the solution: local {"I knew it would come to this..."}

-t0