From: Artem Voroztsov Date: 2008-03-19T00:14:50+09:00 Subject: Re: Questions on Enumerator#skip_first and Enumerable#first 2008/3/18, James Gray : > On Mar 18, 2008, at 6:20 AM, Artem Voroztsov wrote: > > > I asked in ruby-talk, but did not get answer. > > > I remember answering you: > > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/294422 > > ;) 1) I am asking what is wrong with my code and what is the correct way to write this method for enumerator in Ruby. See, l we have the following $ time ./ruby -e '(1..100000000).each.drop(2).take(5).each{|e| puts e}' 3 4 5 6 7 real 0m12.029s user 0m11.546s sys 0m0.585s So it looks like 'drop' and 'take' has call 'to_a' inside. I am asking about method 'drop' for Enumerator which just skips some elements without creating new array. I would like to think about Enumerator as iterator in STL. I guest Enumerator should display conventional pipe behavior (see 'tail' and 'head' commands in Unix). Both 'drop' and 'take' methods are slow for big collections: $ time ./ruby -ve 'i =4; (1..100000000).each.drop(2).each{|e| puts e; break if i==0; i-=1}' ruby 1.9.0 (2008-03-18 revision 15793) [i686-linux] 3 4 5 6 7 real 0m11.967s user 0m11.485s sys 0m0.568s $ time ./ruby -ve 'i =4; (1..100000000).each.take(100000000).each{|e| puts e; break if i==0; i-=1}' ruby 1.9.0 (2008-03-18 revision 15793) [i686-linux] 1 2 3 4 5 real 0m11.396s user 0m10.929s sys 0m0.490s 2) I am sorry. I've found that method Enumerable#first is in trunk. Artem