From: Jacob Fugal Date: 2006-01-06T02:13:13+09:00 Subject: Re: Default block parameter? 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 So if you need a default block and currently use yield, you'll either need to branch on block_given? (as suggested by James), or just use block.call instead of yield. The latter is probably preferrable, but may have subtle differences in parameter assignment if it matters. Jacob Fugal