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

Kravchenko Sergey crux57005 на tut.by
Пт Дек 3 12:55:53 MSK 2004


> > Не подскажите ли - есть ли возможность внутри цикла итератора перейти к
> > следующему значению итерации не возвращаясь в начало цикла? То есть,
> > например, итерация
> >
> > [ 1, "a", 2, "b", 3, "c" ].each{ |i|
> > ...
> > ### get next iteration
> > ...
> > puts (i)
> > }
> >
> > выдавала следующую последовательность:
> > "a"
> > "b"
> > "c"
>
> next
>
> это аналог continue в C/C++
> работает в циклах while и в итерациях
>
> [ 1, "a", 2, "b", 3, "c" ].each{ |i|
> next if i.kind_of? Fixnum
> puts (i)
> }
Спасибо за ответ, но вариант с next мне не подходит.
Как я уже сказал, необходимо перейти к следующему значению итерации,
_не возвращаясь в начало цикла_
Насколько я понимаю, такая возможность должна быть предусмотрена в самом
интерпретаторе, но подобной команды я в описании языка не нашёл - возможно,
она всё-таки не предусмотрена. Если это действительно так - хотелось бы
узнать мнение народа по этому поводу. Может быть есть какой-нибудь способ
сделать это красиво? ;)
Вот другой (более точный) пример задачи:

output = Array.new

[ "a", "b", "b1", "b2", "c", "d" ].each{|i|
    output = [ i ]

    if i == "b"
        ### получить все следующие элементы итерации,
        ### начинающиеся с буквы "b" (т.е. "b1", "b2")
        ### и записать их в массив output
    end

    puts output.join( " " )
}

результатом должен быть следующий выход:
"a"
"b b1 b2"
"c"
"d"

Надеюсь теперь задача более понятна.

Best regards,
    Kravchenko Sergey



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