Bug #6428
closedlazy版take/dropに2度forceを呼んだ時の挙動
Description
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度目以降も同じ個数になるようにするパッチを添付します。
ただし実用的なユースケースがあるわけではありません。
Files
Updated by matz (Yukihiro Matsumoto) over 12 years ago
- Assignee set to nagachika (Tomoyuki Chikanaga)
コミットしてください。
Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r35638.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
-
enumerator.c (lazy_take_func, lazy_take): multiple calls of
force/to_a method to Enumerator::Lazy#take should return same
results. [ruby-dev:45634] [Bug #6428] -
test/ruby/test_lazy_enumerator.rb (test_take_recycle): add test for
above.