[Ruby] Вопрос по итераторам

Dennis Vshivkov walrus на amur.ru
Вт Дек 7 18:05:54 MSK 2004


On Tue, Dec 07, 2004 at 05:28:07PM +0300, SoNaR wrote:

 > красивое решение

 > a,_begin,_end,result = [ "a", "b", "b1", "b2", "c", "d" ],0,0,[]
 > a.each_index{ |index|
 >     ( result.push( _begin.._end ) ; _begin = index ) if a[index] !~ Regexp.new("^#{a[_begin]}\d*")
 >     _end = index
 > }
 > result.push( _begin.._end )

 > p result.map{ |r| a[r].join(" ") }.join(", ")

 > Сначала сохраняем индексы, а потом уже собираем строчку.

    Ну, вариантов решить частную задачу -- миллион и тележка. Но
вопрос-то стоял о том, как в итераторе (который по сути всего один --
#each) получить следующий элемент не в начале блока. Причём так, чтобы
последующая итерация его нам по новой не всучила (то есть
#each_with_index и т.д. не проходят).

    Делал на Continuation -- вообще такой кошмар получается, пальчики
оближешь. :)

-- 
/Awesome Walrus <walrus на amur.ru>
         ...Но это битва при закрытых дверях, борьба жизни чёрт знает с чем...


Подробная информация о списке рассылки Ruby