Ruby中Enumerator类的目的是什么?

ord*_*ary 6 ruby enumerator

如果我像这样创建一个Enumertor:

enum = [1,2,3].each => #<Enumerator: [1, 2, 3]:each> 
Run Code Online (Sandbox Code Playgroud)

enum是一名调查员.这个对象的目的是什么?我不能这样说:

enum { |i| puts i }
Run Code Online (Sandbox Code Playgroud)

但我可以这样说:

enum.each { |i| puts i }
Run Code Online (Sandbox Code Playgroud)

这似乎是多余的,因为Enumerator是用.each.创建的.它似乎存储了一些有关该each方法的数据.

我不明白这里发生了什么.我确信我们有这个Enumerator类有一些合乎逻辑的原因,但是它能做什么,Array不能呢?我想也许它是Array和其他Enumerables的祖先,但它似乎不是.究竟是什么原因导致存在Enumerator类,以及它将在何种上下文中使用?

the*_*Man 4

如果你这样做会发生什么enum = [1,2,3].each; enum.next?:

enum = [1,2,3].each
=> #<Enumerator: [1, 2, 3]:each>
enum.next
=> 1
enum.next
=> 2
enum.next
=> 3
enum.next
StopIteration: iteration reached an end
Run Code Online (Sandbox Code Playgroud)

当您有一个进行计算的枚举器(例如素数计算器或斐波那契数列生成器)时,这会很有用。它为您编写代码的方式提供了灵活性。