From: E S Date: 2005-02-08T07:19:41+09:00 Subject: Re: iteration the ruby way > L�hett�j�: "Robert Klemme" > Aihe: Re: iteration the ruby way > > > "David A. Black" schrieb im Newsbeitrag > news:Pine.LNX.4.61.0502061257450.13178@wobblini... > Hi -- > > On Mon, 7 Feb 2005, E S wrote: > > >> "Robert Klemme" > >> Aihe: Re: iteration the ruby way > >> > >> > >> "E S" schrieb im Newsbeitrag > >> news:20050206143902.PIMQ15813.fep31-app.kolumbus.fi@mta.imail.kolumbus.fi... > >>>> L�hett�j�: Kaspar Schiess > >>>> Aihe: Re: iteration the ruby way > >>>> (In response to > >>>> news:1107566961.943586.81760@g14g2000cwa.googlegroups.com > >>> by William James) > >>>>> Shouldn't that be > >>>>> > >>>>> ary[0...-1].each {|e| do_something(e) } > >>>>> do_something_else(ary.last) > >>>>> > >>>>> or > >>>>> > >>>>> ary[0..-2].each {|e| do_something(e) } > >>>>> do_something_else(ary.last) > >>>>> > >>>>> ? > >>>> > >>>> I would prefer this solution for its clarity of expression. > >>> > >>> Me too :) I just think the #inject won on the neat-o factor, > >>> particularly since it seemed adequate for the OP. > >> > >> Partly yes and partly no: apart from the cute factor, there is a real > >> advantage of the inject solutions show: they work for *all* Enumerables > >> while the array indexing works only for arrays. So #inject is more > >> general. > >> Also, Array#[] creates a new array instance along the way which is a bit > >> inefficient. But I do agree that the indexing might be more readable. > > > > I think assuming an Array is valid in the described scenario (which > > is the last element in a Hash, after all?) > > > If you goal was to create a string representation of the hash, with > > some kind of marker between each key/value pair -- but not after the > > last one -- then the last-ness of the last element would be important > > in the sense that you'd treat it differently (whatever it was, and > > whether or not it remained the same from one run to another). > > Note though that you might as well treat the *first* element specially. > IMHO that's usually easier even with #each: > > first = true > enum.each do |e| > if first > first = false > else > print " -- " > end > print e > end > print "\n" class Array alias :head :first def tail self[1..-1] end end ? :) > Kind regards > > robert E