From: dblack@... Date: 2006-01-06T02:50:42+09:00 Subject: Re: Default block parameter? Hi -- On Fri, 6 Jan 2006, Jacob Fugal wrote: > On 1/4/06, dblack@wobblini.net wrote: >> On Thu, 5 Jan 2006, Mark J.Reed wrote: >> >>> Okay, this is probably a dumb question, but how do I declare an >>> optional block parameter with a default value? >>> >>> I tried several variations on this basic theme: >>> >>> def meth(&block = lambda { |i| ... }) >>> ... >>> end >> >> The &block thing is a special dispensation from Ruby, letting you grab >> the block but not serving as a normal argument. The way I've always >> seen this done is: >> >> def meth(&block) >> block ||= lambda { ... } >> ... >> end > > But keep in mind that assigning to block inside the method doesn't > affect the behavior of yield: > > irb> def test(&block) > irb> block ||= lambda{ puts "default" } > irb> yield > irb> end > => nil > irb> test > LocalJumpError: no block given Right -- all that happens in my version is assignment to a variable. David -- David A. Black dblack@wobblini.net "Ruby for Rails", from Manning Publications, coming April 2006! http://www.manning.com/books/black