今天发现了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中都可以使用,这样增加了很多便捷性。