From: "T. Onoma" Date: 2003-11-24T14:13:42+09:00 Subject: Re: open-uri patch, added progress_proc hook 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