From: Tanaka Akira Date: 2009-08-19T12:09:59+09:00 Subject: [ruby-dev:39123] Re: StopIteration#result In article , Yukihiro Matsumoto writes: > Pythonのiteratorにはsendとかthrowとかがあってyieldの返り値を > 指定できるようになってますね(PEP-0342)。対応するyieldがない最 > 初の1回目はどうするんだろうかと思ったらTypeErrorだそうです。 なるほど。 > これと同じ方針でいいなら、nextに引数を与えるという案が以前に > 出ていましたね。ただ、前に考えた時には実装がかなり面倒だった > のであきらめたような覚えがあります。 今は Enumerator#peek があるので next の引数はうまくないです ね。 peek の導入の結果、具体的に fiber を再起動するのは、peek か もしれなくて、next は先読みしたものを単に返すだけかもしれま せん。その場合、next の引数に渡されても手遅れです。 peek は具体的に用途があるので、yield の値のように一段メタな ものと比べると、peek が優先かなぁ。 遠藤さんが [ruby-dev:31798] で Enumerator#value= を提案して ますが、次に yield の値を設定する Enumerator のメソッドとい うのはあり得るかもしれません。value= という名前はダメだと思 いますが。 (そこでは、Enumerator#result も提案されていますが、これは StopIteration#result のほうがいいと思う) -- [田中 哲][たなか あきら][Tanaka Akira]