From: Lars Olsson Date: 2010-09-12T22:20:07+09:00 Subject: Re: How to do foo.chomp!.rstrip!.downcase! ? On 12 Sep, 15:13, Lars Olsson wrote: > 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 (rstripanddowncaseas 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 Argh...it was supposed to read "implemented as String.dup.chomp!" /lasso