From: Yusuke ENDOH Date: 2007-12-05T01:50:32+09:00 Subject: [ruby-dev:32459] Enumerator raises `dead fiber called' 遠藤と申します。 以下のコードで dead fiber called が発生するのは仕様でしょうか。 def foo raise StopIteration end g = to_enum(:foo) g.next rescue p $! #=> StopIteration g.next rescue p $! #=> dead fiber called また、以下のように Enumerator を dup すると変な事になります。 def foo yield 1 end g1 = to_enum(:foo) p g1.next #=> 1 g2 = g1.dup g1.next rescue p $! #=> iteration reached at end p g2.next #=> # g2.next rescue p $! #=> dead fiber called Fiber が dup できないので、Enumerator の dup も禁止すべきでは ないでしょうか。そうでないとしても、enumerator_init_copy で dst と no_next のコピーが漏れているような気がします。 -- Yusuke ENDOH