ささだです。

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