If I'm changing the sequence of iterator calling like > enum = StringIO.new("foo").each => #<Enumerator: #<StringIO:0x00000003822078>:each> > enum.peek => "foo" > enum = StringIO.new("foo").each => #<Enumerator: #<StringIO:0x000000037e6140>:each> > enum.to_a => ["foo"] > enum.peek then it showing this error: StopIteration: iteration reached an end from (irb):10:in `peek' from (irb):10 from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands/console.rb:90:in `start' from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands/console.rb:9:in `start' from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.0.8/lib/rails/commands.rb:62:in `<top (required)>' from bin/rails:4:in `require' from bin/rails:4:in `<main>' On Fri, Nov 21, 2014 at 5:08 PM, <jonas.nicklas / gmail.com> wrote: > Issue #10534 has been reported by Jonas Nicklas. > > ---------------------------------------- > Bug #10534: Enumerator methods other than "next" do not respect "peek" > https://bugs.ruby-lang.org/issues/10534 > > * Author: Jonas Nicklas > * Status: Open > * Priority: Normal > * Assignee: Yukihiro Matsumoto > * Category: core > * Target version: > * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0] > * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN > ---------------------------------------- > It seems like using "peek" and then calling other methods on the > Enumerator consumes the value that was peeked at. While `next` correctly > returns the peeked-at value the next time it is called, other Enumerator > methods such as `to_a` and `each` do not. > > ~~~ > >> enum = StringIO.new("foo").each > => #<Enumerator: #<StringIO:0x007ff3313d8688>:each> > >> enum.peek > => "foo" > >> enum.to_a > => [] > ~~~ > > Here the final call to `enum.to_a` should have returned `["foo"]`, since > we have not consumed anything from the enumerator yet. The peeked-at value > is not included in the returned Array. > > Taking a glance at the code, it seems that these methods do not call > `next` under the hood, but instead have some other mechanism of iterating > over the Enumerator, this seems very counter-intuitive to me. > > > > -- > https://bugs.ruby-lang.org/ > -- Vimlesh Kumar Patel