Ruby之Enumerator类

今天发现了Ruby1.8.6和 Ruby1.9.2的一个不同之处,试运行以下代码:

 

require 'find'

puts Find.find("./data").class 

在Ruby1.9.2中,最后的结果是Enumerator,而在Ruby1.8.6中,结果则是`find': no block given (LocalJumpError)

由此可见Enumerator是Ruby1.9.2中新增的类。

 

使用ri Enumerator得到的说明是:

Enumerator是 A class which provides a method 'each' to be used  as an Enumerator object.

可以通过下面方法创建Enumerator类:

1. Kernal#to_enum

2. Kernal#enum_for

3. Enumerator.new

大部分iteration方法,如果没有带block,返回一个Enumerator类的对象。

这样就可以解释为什么在Ruby1.8.6中报错而在Ruby1.9.2中可以正常运行的原因了。

 

由于Enumerator类mixin了Enumerable模块,所以Enumerable模块的方法在Enumerator中都可以使用,这样增加了很多便捷性。


Ruby之Enumerator类

你可能感兴趣的:(Ruby,Enumerator)