[#46930] [ruby-trunk - Bug #6825][Open] forking and pthread_cond_timedwait: Invalid argument (EINVAL) on OS X / 1.9.3-p194 — "xentronium (Mark A)" <markizko@...>

29 messages 2012/08/02

[#46974] [ruby-trunk - Bug #6830][Assigned] test failure test_constants(OpenSSL::TestConfig) [/ruby/test/openssl/test_config.rb:27] on Mac + homebrew — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

17 messages 2012/08/04

[#46975] [ruby-trunk - Bug #6831][Assigned] test_getpwuid() on Mountain Lion — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

12 messages 2012/08/04

[#46996] [ruby-trunk - Bug #6836][Assigned] Improve File.expand_path performance in Windows — "luislavena (Luis Lavena)" <luislavena@...>

15 messages 2012/08/04

[#47036] [ruby-trunk - Feature #6841][Open] Shorthand for Assigning Return Value of Method to Self — "wardrop (Tom Wardrop)" <tom@...>

18 messages 2012/08/07

[#47108] [ruby-trunk - Feature #6852][Open] [].transpose should behave specially — "boris_stitnicky (Boris Stitnicky)" <boris@...>

13 messages 2012/08/10

[#47138] [ruby-trunk - Bug #6861][Open] ERB::Util.escape_html is not escaping single quotes — "spastorino (Santiago Pastorino)" <santiago@...>

14 messages 2012/08/12

[#47163] [ruby-trunk - Bug #6865][Open] GC::Profiler.report might create a huge String and invoke a few GC cycles — "Eregon (Benoit Daloze)" <redmine@...>

9 messages 2012/08/13

[#47189] [ruby-trunk - Feature #6868][Open] Make `do` in block syntax optional when the block is the last argument of a method and is not an optional argument — "alexeymuranov (Alexey Muranov)" <redmine@...>

8 messages 2012/08/14

[#47243] [ruby-trunk - Feature #6895][Open] TracePoint API — "ko1 (Koichi Sasada)" <redmine@...>

27 messages 2012/08/20

[#47267] [ruby-trunk - Bug #6903][Open] [[Ruby 1.9:]] --enable-load-relative broken on systems with /lib64 — "mpapis (Michal Papis)" <mpapis@...>

11 messages 2012/08/22

[#47309] [ruby-trunk - Bug #6929][Open] Documentation for Ripper — "zzak (Zachary Scott)" <zachary@...>

16 messages 2012/08/25

[#47345] [ruby-trunk - Feature #6946][Open] FIPS support? — "vo.x (Vit Ondruch)" <v.ondruch@...>

35 messages 2012/08/28

[ruby-core:47265] [ruby-trunk - Feature #6824] StopIteration gets a source method

From: "dsisnero (Dominic Sisneros)" <dsisnero@...>
Date: 2012-08-21 19:42:05 UTC
List: ruby-core #47265
Issue #6824 has been updated by dsisnero (Dominic Sisneros).


 I use the following method to weave enumerators together

#Intersperse several iterables, until all are exhausted
    def weave(*enumerators)
      enums = enumerators.map{|e| e.to_enum}    
      result = Enumerator.new do |y|     
        while !enums.empty?
          loop_enum = enums.dup
          loop_enum.each_with_index do |enum,i|
            begin
              y << enum.next
            rescue StopIteration
              #raise StopIteration if enums.empty?
              enums.delete_at(i)
            end
          end
        end
        #raise StopIteration
      end
    end  
----------------------------------------
Feature #6824: StopIteration gets a source method
https://bugs.ruby-lang.org/issues/6824#change-28961

Author: jasiek (Jan Szumiec)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0


=begin
I'd like to add a method to StopIteration that returns an instance of the enumerator which triggered this exception. Eg:

  enum = [].each
  begin
    enum.next
  rescue StopIteration => ex
    puts "same" if ex.source == enum
  end

This is useful when you're merging multiple collections using min/max - when one of the collections is exhausted it can be easily ignored.

  enumerators = 100.times.map do
    rand(100).times.map do
      rand
    end.sort.each
  end

  merged = []
  while !enumerators.empty?
    begin
      enumerators.map(&:peek)
      values = enumerators.map(&:next)

      merged += values.sort
    rescue StopIteration => e
      enumerators.delete(e.source)
      retry
    end
  end

  fail unless merged != merged.sort

Attached is a patch against trunk.
=end




-- 
http://bugs.ruby-lang.org/

In This Thread