2011年4月15日

[ruby-list:47976] Fiber#resumeの引数について

郡司と申します。

[ruby-list:47973]を見ていてちょっと気になったので、
Fiberの挙動を確かめるために下記のサンプルコードを実行してみました。

--------
f = Fiber.new do
Fiber.yield 1

Fiber.yield 2
Fiber.yield 3
end

puts f.resume
puts f.resume
puts f.resume
puts f.resume(8)
--------

すると、次のような実行結果となりました。

--------
1
2
3
8
--------

Fiberのブロックが終了した場合のFiber#resumeの戻り値は、
ブロックの評価値(ブロック中で最後に評価された式の戻り値)
だと思うのですが、Fiber#resumeに引数を与えると、
(ブロックにパラメータがないにも関わらず)
その引数がFiberのブロックのコンテキストで評価されている
ように見えるのですが、これは意図された挙動でしょうか。

比較のためにFiberのブロックに意図的に「最後の評価値」
を入れたサンプルコードを下記に示します。

--------
f = Fiber.new do
Fiber.yield 1
Fiber.yield 2
Fiber.yield 3
4
end

puts f.resume
puts f.resume
puts f.resume
puts f.resume(8)
--------

実行結果は以下です。

--------
1
2
3
4
--------


投稿者 xml-rpc : 2011年4月15日 17:55
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103116
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。