From: "David A. Black" Date: 2009-08-24T08:53:44+09:00 Subject: [ruby-core:25063] Re: Proposal: Simpler block format Hi -- On Mon, 24 Aug 2009, Yehuda Katz wrote: > > The compelling this for me is that it makes methods that take multiple > blocks easier for programmer to read. For programmer, one big confusion in > Ruby is difference between proc, block, lambda and method. Unifying syntax > for block and proc shows that they are really just same thing, with proc > passed as parameter and block passed as special parameter. I have to admit that this strikes me as a solution in search of a problem, in that I've never had any trouble reading methods that take Proc objects as arguments. Also, I think that with the unification of block and method parameter semantics, things are getting a lot less confusing as to the differences among them. I don't consider a block to be the same thing as a proc, nor do I consider it a method argument. The block is part of the method-call syntax; in itself, it isn't an object (just as the argument list is not, in itself, an object). > Then whenever programmer sees { something } they know it is "proc" with > lexical scope, and whenever programmer sees ->{ something } they know it is > "lambda" with function scope. One danger of { something } being a proc is that it does away with the error message for odd-numbered hashes -- an edge case, admittedly, but still. > I would even be in favor of def { } as lambda syntax, which would make clear > to programmer that this block behaves just like normal method. Then we have > just two things: def for method-scope (def something() end and def { }) and > bare { } for block scope. Dave Thomas brought up the def { } thing at RubyConf 2005, I believe, and got a big round of applause :-) It's definitely way better than ->() (which I still sort of hope will disappear, though my hope is fading). David -- David A. Black / Ruby Power and Light, LLC / http://www.rubypal.com Q: What's the best way to get a really solid knowledge of Ruby? A: Come to our Ruby training in Edison, New Jersey, September 14-17! Instructors: David A. Black and Erik Kastner More info and registration: http://rubyurl.com/vmzN