From: "yhara (Yutaka HARA)" Date: 2013-01-12T04:58:35+09:00 Subject: [ruby-core:51387] [ruby-trunk - Bug #7248] Shouldn't Enumerator::Lazy.new be private? Issue #7248 has been updated by yhara (Yutaka HARA). Assignee changed from yhara (Yutaka HARA) to marcandre (Marc-Andre Lafortune) marcandre (Marc-Andre Lafortune) wrote: > Oh, interesting. > > I'll do my best to document it, then. > Thanks! > This leads to more questions, though: > > 1) Is there a use case for the form without a block? > > It's used internally (before calling lazy_set_method), but other than that I can't see a good use. > That form is only for internal use. You can remove the form without a block by replacing `Lazy.new(enum)' with `Lazy.new(enum){|y, v| y< 2) Is there a use case for specifying a symbol and arguments? > Actually I did not know lazy_initialize can take a symbol :-p So I'm not sure about how the symbol and arguments are used, but it looks like for internal use. According to svn annotate, it is introduced to implement lazy.cycle (r35028). > Again, internally we call lazy_set_method, to the symbol and arguments are only used by inspect, right? > That seems right. > 3) Is there a good way to improve the `inspect` of such a lazy enum? > > p [11,12,13].filter_map{|i| i*i if i.even?} # => #:each> > > Notice the `each` and no appearance of `filter_map` > > Doing `Lazy.new(self, :filter_map)` does not work and seems redundant. > > > BTW, ultimately, I'm trying to see if Lazy.new can be adapted to accept a `size` lambda argument... Well, I have no idea. It would be difficult to design Lazy.new which may take obj, block, symbol, args and size/size_fn... BTW, I have a question. Document of to_enum says "see Enumerator#size=" but there is no such method. Is it a typo? https://github.com/ruby/ruby/blob/e90ccd3beb0b9bf1125461ef68943578739bebbe/enumerator.c#L201 ---------------------------------------- Bug #7248: Shouldn't Enumerator::Lazy.new be private? https://bugs.ruby-lang.org/issues/7248#change-35364 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: Normal Assignee: marcandre (Marc-Andre Lafortune) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-10-29 trunk 37380) [x86_64-darwin10.8.0] Is there a reason why Enumerator::Lazy.new is not private? Lazy enumerators should be created with `Enumerable#lazy`. Moreover, there is no doc, and it can give unexpected results too. -- http://bugs.ruby-lang.org/