岩室です。

2008/07/06 15:32 Nobuyoshi Nakada <nobu / ruby-lang.org>:
> 完全に同じではありませんが、Generatorの代替としては
> Enumerator#nextが使えるはずです。

済みません、マニュアルをあさってみたんですが、Generator風の使い方が全くわかりませんでした。
やりたいことはこんな感じのことですが、Enumeratorではどう書けばいいんでしょう。

# Generatorのブロックの中での処理結果を、
g = Generator.new{|g| IO.popen("tar --help") {|io| io.each_line
{|line| g.yield(line)}}}
...
# どこか遠くのところで取得したい
while g.next?; io.print(g.next); end

> というかGeneratorの代わりにFiberを、という流れが不思議なんですが。

実は手元にFiberで書き直したgenerator.rbもあったんですが……。書くのはすごく簡単だったのに
消えてたので、何か理由があるのかと思って過去メールをあさってみたところ、[ruby-dev:34278]
の流れを見て「Generatorは消しましょう」というのがコンセンサスなのかと思ったのでした。

で、どうせ今から書くのならFiberで書いておけば将来の移行のときに考えなくていいんじゃないか
ということで、少なくとも上の例で書いたようなことができる程度の機能を実装してみたのが、
件のコードです。
-- 
IWAMURO Motnori <http://vmi.jp/>