From: Bharat Ruparel Date: 2007-02-09T23:39:18+09:00 Subject: Re: Iterators and blocks question Thanks Robert, Tim Hunter's solution seems most straightforward to me. Which is: counter = 1 IO.foreach("test.txt") {|line| puts "#{counter}. #{line}"; counter += 1} The solution that you present: require 'enumerator' IO.to_enum(:foreach, "test.txt").inject(0) do |counter, line| puts "#{counter}. #{line}" counter + 1 end Seems like a good one too, except more indirect. When would you recommend using one over another? Or is it largely a matter of taste? Also, why do you have to "require" the enumerator module here whereas Tim's solution didn't. I did a search on "ri IO" and it shows that IO includes enumerable (it is not enumerator, I know). Also it shows that foreach is a class method for IO class whereas I could not find anything on to_enum. Is there a way to get RoR style online API docs for Ruby? I find "ri" a bit primitive. Bharat -- Posted via http://www.ruby-forum.com/.