[ruby-trunk - Bug #6428][Open] lazy版take/dropに2度forceを呼んだ時の挙動

Issue #6428 has been reported by nagachika (Tomoyuki C.).


Bug #6428: lazy版take/dropに2度forceを呼んだ時の挙動

Author: nagachika (Tomoyuki C.)
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度目以降も同じ個数になるようにするパッチを添付します。
ただし実用的なユースケースがあるわけではありません。

Issue #6428 has been updated by matz (Yukihiro M.).

Assignee set to nagachika (Tomoyuki C.)

コミットしてください。

Bug #6428: lazy版take/dropに2度forceを呼んだ時の挙動

Author: nagachika (Tomoyuki C.)
Status: Open
Priority: Normal
Assignee: nagachika (Tomoyuki C.)
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度目以降も同じ個数になるようにするパッチを添付します。
ただし実用的なユースケースがあるわけではありません。