如果我像这样创建一个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类,以及它将在何种上下文中使用?
如果你这样做会发生什么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)
当您有一个进行计算的枚举器(例如素数计算器或斐波那契数列生成器)时,这会很有用。它为您编写代码的方式提供了灵活性。
| 归档时间: |
|
| 查看次数: |
1794 次 |
| 最近记录: |