From: SASADA Koichi Date: 2007-06-07T20:56:51+09:00 Subject: [ruby-dev:30925] Re: Supporting Fiber  ささだです。 Yusuke ENDOH さんは書きました: > 現状で、以下のコードだと 1 だけ出力されますが、 > > f = Fiber.new do > p 1 > Fiber.prev.yield > p 2 > end > f.yield > > 以下のコードだと 1 と 2 が出力されます。 > > f = Fiber.new do > p 1 > Fiber.prev.yield > p 2 > end > Fiber.new do > f.yield > end.yield > > この違いは意図されたものでしょうか。 > 個人的には、どちらも 1 だけ出力されるのが直感にあいます。  これは、「Fiber が終了した場合、どうするか」という問題になり ます。ここは、いくつか選択肢があるんですが、現在では [ruby-dev:30827] に書いたとおり、 > * Fiber 終了時の処理の流れ > >  いろいろ考えて、次のようにするようにしました。 > > (a) まず、Fiber.prev に pass > (b) ただし、Fiber.prev がすでに終了している場合、Fiber.root へ pass > >  Fiber に渡すブロックの評価値は、pass で渡ることになります。 > >  たとえば、 > > p Fiber.new{ > :ok > }.pass #=> :ok > > となります。 となっています。どうするとよいと思いますか? -- // SASADA Koichi at atdot dot net