"Mauricio FernŠŌdez" <batsman.geo / yahoo.com> schrieb im Newsbeitrag
news:20040114155507.GA17702 / student.ei.uni-stuttgart.de...
> On Thu, Jan 15, 2004 at 12:47:24AM +0900, Jim Freeze wrote:
> > Hi
> >
> > I just noticed that Enumerable does not support collect! although
> > it does support collect. Was this changed from earlier versions?
> > If so, why?
> >
> > irb(main):001:0> class M
> > irb(main):002:1> def each
> > irb(main):003:2> yield 1
> > irb(main):004:2> yield 2
> > irb(main):005:2> end
> > irb(main):006:1> end
> > => nil
> > irb(main):007:0> class M
> > irb(main):008:1> include Enumerable
> > irb(main):009:1> end
> > => M
> > irb(main):010:0> m=M.new
> > => #<M:0x1892d0>
> > irb(main):011:0> m.collect { |i| i*2 }
> > => [2, 4]
> > irb(main):012:0> m.collect! { |i| i*2 }
> > NoMethodError: undefined method `collect!' for #<M:0x1892d0>
> >         from (irb):12
>
> Does collect! (or map!) make sense for Enumerables? Keep in mind that
> collect! (aka map!) is defined in Array.
> I guess you could define it as
>   module Enumerable
>     def collect!(&b)
> to_a.collect!(&b)
> end
>   end
> but I don't feel too bad about having to do to_a explicitly.

Especially since your definition of collect! would defy users'
expectations that it would do it in place while it really creates a copy.
:-)

Regards

    robert