如何#rewind #each下的内部位置?

时间:2014-01-18 22:23:59

标签: ruby iterator enumeration enumerable redo

我正在尝试编写一个代码,其中枚举序列被重新引导到开头。

我认为rewind适用于此应用程序,但我不确定如何在传递给块的each迭代器下实现它?在Ruby-Docs示例中,next用于一次移动一个内部位置。有一个块,它会自动移动。

网上没有很多好的例子。我现在的解决方法是在循环下嵌套迭代器并在迭代器下使用break。当迭代器中断时,循环重置枚举序列。

有没有更好的方法 - 因为我确信这样做了?

1 个答案:

答案 0 :(得分:4)

使用Ruby核心类库中的Enumerator#rewind方法。

  

将枚举序列倒转到开头。如果封闭对象响应“倒带”方法,则调用它。

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