Как #indind внутренней позиции под #each?

Я пытаюсь написать код, в котором последовательность перечисления перезаписывается в начале.

Я думаю rewind подходит для этого приложения, но я не уверен, как реализовать его под each передача итератора в блок? В примере с Ruby-Docs next используется для перемещения внутренней позиции по одному за раз. С блоком, он будет двигаться автономно.

Там не так много хороших примеров онлайн для этого. Мой обходной путь на данный момент заключается в том, чтобы поместить итератор в цикл и использовать break под итератором. Когда итератор прерывается, цикл сбрасывает последовательность перечисления.

Есть ли лучший способ - как я уверен, что есть - сделать это?

1 ответ

Использовать Enumerator#rewind метод из библиотечного класса ядра Ruby.

Перематывает последовательность перечисления в начало. Если вложенный объект отвечает на метод "перемотки", он вызывается.

a = [1,2,3,4]
enum= a.each
enum  # => #<Enumerator: [1, 2, 3, 4]:each>
enum.next # => 1
enum.next  # => 2
enum.rewind # => #<Enumerator: [1, 2, 3, 4]:each>
enum.next # => 1
Другие вопросы по тегам