Hi --

On Wed, 7 Jul 2004, Robert Klemme wrote:

> 
> "David A. Black" <dblack / wobblini.net> schrieb im Newsbeitrag
> news:Pine.LNX.4.44.0407060654550.23516-100000 / wobblini...
> > Hi --
> >
> > On Tue, 6 Jul 2004, Robert Klemme wrote:
> >
> > > True.  The approach is betters suited to a method implementation:
> > >
> > > module Enumerable
> > >   def index_2(obj=nil, &b)
> > >     b = lambda {|x| obj == x} unless b
> > >     inject(0) {|i,el| return i if b.call(el); i+1}
> > >     nil
> > >   end
> > > end
> >
> > I agree.  My version, for what it's worth, was:
> >
> >   module Enumerable
> >     def b_index
> >       each_with_index {|e,i| return i if yield(e) }
> >       nil
> >     end
> >   end
> >
> > I decided to make it orthogonal to #index, rather than a superset of
> > it, on the theory that it would be good to avoid making it legal to
> > give both an argument and a block.
> 
> Might be best to just enhance #index with the block variant.

What stumped me was: given this:

  ary.index(x) {|e| <condition> }

which behavior would you expect?  Or would it raise an exception?  I
couldn't decide which would be best, which is what led me to a new
method.  I can't remember whether there are any methods that protest
if you give an argument and a block....  I have a memory that there
are one or two, but I'm not sure what they are.


David

-- 
David A. Black
dblack / wobblini.net