From: Lars Olsson Date: 2010-09-12T22:18:03+09:00 Subject: Re: How to do foo.chomp!.rstrip!.downcase! ? On 10 Sep, 23:11, Jesús Gabriel y Galán wrote: > On Fri, Sep 10, 2010 at 8:49 PM, Jason Roelofs wrote: > > On Sep 10, 2010, at 1:29 PM, Jesús Gabriel y Galán wrote: > > >> On Fri, Sep 10, 2010 at 6:26 PM, Jason Roelofs wrote: > >>> On Sep 10, 2010, at 11:28 AM, ara.t.howard wrote: > > >>>>> ...it seems like I should be able todo: > > >>>>>foo.chomp!.rstrip!.downcase! > > >>>> you can. > > >>>> %w( chomp!rstrip!downcase! ).each{|m| foo.send(m)} > > >>>> -a > > >>> So... what's wrong with: > > >>> foo =foo.chomp.rstrip.downcase > > >> Each call creates a copy of the string, and are all discarded along > >> with the original except the last one. > > >> Jesus. > > > I don't see any problem there, that's expected. Ruby has a GC, and those will get cleaned up appropriately. > > > The ! versions don't work chained, this version does. You shouldn't be worrying about the cost of creating 3 strings. > > I know, regarding that, I don't see any problem either with > > foo.chomp! > foo.rstrip! > foo.downcase! > > Robert commented on this already (although his email was lost in some > problem with SpamAssassin, but he resent): > > Robert Klemme wrote: > > ... which usually is less efficient.  I guess OP had a reason to > > use bang versions. > > and I clarified. If it's three strings, no problem. If this is in a > loop you might want to reduce garbage. Just pointing out a fact about > the non-bang methods. > > Jesus. Yeah, looking at the source code for ruby 1.9 reveals that String.chomp is essentially implemented as String.sup.chomp!, so you're absolutely right about the non bang versions creating some extra garbage. The same is true about (rstrip and downcase as well.) How this affects the overall performance is really hard to say without benchmarking though. But as Robert claimed foo.chomp! foo.rstrip! foo.downcase! is probable the most efficient way. /lasso