Ruby Enumerators_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby Enumerators

Ruby Enumerators

 2011/1/8 8:13:23  fuliang  http://fuliang.javaeye.com  我要评论(0)
  • 摘要:一个enumerator是一个用来枚举其他对象的Enumerable对象。在Ruby1.8,需要require'enumerator',在Ruby1.9已经内建,不需要再require,并且进行了增强。Enumerators是类Enumerable::Enumerator,所以你可以直接new出来实例,但是通常使用to_enum或者使用enum_for(Object的方法)。如果没有参数,to_enum返回的enumerator,他的each直接delegate到目标对象的each
  • 标签:Ruby
一个enumerator是一个用来枚举其他对象的Enumerable对象。在Ruby1.8,需要require 'enumerator',在Ruby1.9已经内建,不需要再require,并且进行了增强。
Enumerators是类Enumerable::Enumerator,所以你可以直接new出来实例,但是通常使用to_enum或者使用enum_for(Object的方法)。如果没有参数,to_enum返回的enumerator,他的each直接delegate到目标对象的each。第一个参数是目标对象的迭代方法symbol,其他的参数都被传递给这个命名的方法。在Ruby 1.9,String已经不是Enumerable了,但是它定义了三个迭代方法each_char,each_byte,each_line。如果我们想要使用其他的Enumerable方法,比如
map,我们想基于each_char迭代器。我们可以创建一个enumerator:
s = "hello"
s.enum_for(:each_char).map{|c| c.succ } # => ["i", "f", "m", "m", "p"]

事实上,上面的例子在Ruby 1.9可以不用显式的使用to_enum或者enum_for,因为
times, upto, downto,step,each以及Enumerable相关的方法自动返回enumerator.
引用
发表评论
用户名: 匿名