Как #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