From: "nagachika (Tomoyuki Chikanaga)" Date: 2012-05-13T01:52:19+09:00 Subject: [ruby-dev:45634] [ruby-trunk - Bug #6428][Open] lazy版take/dropに2度forceを呼んだ時の挙動 Issue #6428 has been reported by nagachika (Tomoyuki Chikanaga). ---------------------------------------- Bug #6428: lazy版take/dropに2度forceを呼んだ時の挙動 https://bugs.ruby-lang.org/issues/6428 Author: nagachika (Tomoyuki Chikanaga) Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-05-12 trunk 35629) [x86_64-darwin10.8.0] Enumerator::Lazy#take が返す Enumerator::Lazy に繰り返し force/to_a メソッドを呼ぶと、 2度目以降は全ての要素を返しています。 $ cat lazy_take_recycle.rb lazy_take = (1..5).lazy.take(3) p lazy_take.force p lazy_take.force $ ruby lazy_take_recycle.rb [1, 2, 3] [1, 2, 3, 4, 5] 同じ Enumerator::Lazy に force を複数回呼ぶのがよい使いかたではないのかもしれませんが、 なんとなく何度呼んでも先頭の要素を返してくれるのが嬉しいのではないかと思います。 2度目以降も同じ個数になるようにするパッチを添付します。 ただし実用的なユースケースがあるわけではありません。 -- http://bugs.ruby-lang.org/