Issue #6158 has been updated by Innokenty Mikhailov.

File lazy_bang.diff added

=begin
Same for me - at first was thinking about having take evaluating makes sense.
But having ability to continue building the lazy chain looks more logical.

Having something like #pinch totally makes sense.

However I'm thinking about more radical solution: having methods with bang (!) always evaluate. 

Like (({[1,2,3,4,5].lazy.map! { |x| x * 10 }})) will return the evaluated result.
This will solve the problem of calling (({to_a})) manually.
It might be confusing at first but then I think people will love that feature.
What do you think?
=end

----------------------------------------
Bug #6158: Enumerator::Lazy#take: should it be lazy?
https://bugs.ruby-lang.org/issues/6158#change-24663

Author: Benoit Daloze
Status: Assigned
Priority: Normal
Assignee: Shugo Maeda
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2012-03-15 trunk 35042) [x86_64-darwin10.8.0]


Hello,

I noticed #take is now defined on Enumerator::Lazy, and it has lazy behavior:

    (1..1000).lazy.select(&:even?).take 3 # => #<Enumerator::Lazy ...>

I would expect #take to not be lazy and always produce an Array, like the original Enumerable#take does.
I think many rubyists would expect that too.

Do you have a use case for a lazy #take ? I can't find one right now.

I've seen #6152, although I can't read it.
I think `lazy.take(5)` should be equal to `lazy.first(5)` and it reads better.


-- 
http://bugs.ruby-lang.org/