From: 13 Date: 2006-03-22T04:03:07+09:00 Subject: Re: specify a mandatory block parameter Hi, Blocks are actually objects of class Proc, so if you need to enforce presence of block parameter then you can do something like this: irb(main):001:0> p = Proc.new { puts 'block' } => # irb(main):002:0> def method_with_mandatory_block(block) irb(main):003:1> block.call irb(main):004:1> end irb(main):005:0> method_with_mandatory_block p block -- Martins On 3/20/06, dblack@wobblini.net wrote: > Hi -- > > On Tue, 21 Mar 2006, Shea Martin wrote: > > > Jeffrey Schwab wrote: > > > >> So... You want an exception to be thrown, but you don't want to throw an > >> exception? Please show me what I've missed. Are you saying that > >> specifying the &p_block parameter should make the block mandatory > >> automatically? > > > > I am not saying it *should*, but just curious why specifying a block, does > > not make it mandatory (automatically)? Specifying a normal parameter, makes > > it mandatory (automatically. It just seems odd that the two are treated > > differently. Just my $0.02. > > It's hard for me to answer, because I don't understand why one would > assume, a priori, that they *should* be treated the same :-) But in > practice, the code-block facility works out better, I think, the way > it is. The method can easily branch on existence or non-existence of > a block, and it's easy to write methods that can work with or without > a block. I guess I view the &block thing as a special concession to > the possibility that one might want to handle the block as an object > (rather than as a syntactic construct), but not the heart of the > matter. > > > David > > -- > David A. Black (dblack@wobblini.net) > Ruby Power and Light, LLC (http://www.rubypowerandlight.com) > > "Ruby for Rails" chapters now available > from Manning Early Access Program! http://www.manning.com/books/black > >