Iteration the ruby way

Lähettäjä: "Robert Klemme" <bob.news@gmx.net>
Aihe: Re: iteration the ruby way

"David A. Black" <dblack@wobblini.net> schrieb im Newsbeitrag
news:Pine.LNX.4.61.0502061257450.13178@wobblini...
Hi --

>> "Robert Klemme" <bob.news@gmx.net>
>> Aihe: Re: iteration the ruby way
>>
>>
>> "E S" <eero.saynatkari@kolumbus.fi> schrieb im Newsbeitrag
>> news:20050206143902.PIMQ15813.fep31-app.kolumbus.fi@mta.imail.kolumbus.fi...
>>>> Lähettäjä: Kaspar Schiess <eule@space.ch>
>>>> 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 :slight_smile: 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

? :slight_smile:

Kind regards

    robert

E

···

On Mon, 7 Feb 2005, E S wrote: