From: "matz (Yukihiro Matsumoto)" Date: 2012-05-13T23:14:23+09:00 Subject: [ruby-dev:45635] [ruby-trunk - Bug #6428] lazy版take/dropに2度forceを呼んだ時の挙動 Issue #6428 has been updated by matz (Yukihiro Matsumoto). Assignee set to nagachika (Tomoyuki Chikanaga) コミットしてください。 ---------------------------------------- Bug #6428: lazy版take/dropに2度forceを呼んだ時の挙動 https://bugs.ruby-lang.org/issues/6428#change-26600 Author: nagachika (Tomoyuki Chikanaga) Status: Open Priority: Normal Assignee: nagachika (Tomoyuki Chikanaga) 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/