From: Akinori MUSHA <knu@...> Date: 2011-11-01T13:08:28+09:00 Subject: [ruby-core:40599] [ruby-trunk - Feature #4890] Enumerable#lazy Issue #4890 has been updated by Akinori MUSHA. > It sounds fine for me, but I don't think Enumerable (or Enumerator) should have methods of Array such as [] and size. It'll be OK if once we decide we don't care too much about backward compatibility in 3.0. Though I think it would be nice if we can add attributes (aspects) like indexability and finiteness so the wrapper module (Enumerable) can take advance of them and enable [] and size as appropriate. > How about to add Enumerable#defer that returns a lazy version of Enumerator as a transition step in Ruby 2.0? > If Enumerator gets lazy in Ruby 3.0, Enumerable#defer can be changed to be just an alias of to_enum. Is defer the new name for lazy in this proposal? ---------------------------------------- Feature #4890: Enumerable#lazy http://redmine.ruby-lang.org/issues/4890 Author: Yutaka HARA Status: Open Priority: Normal Assignee: Yukihiro Matsumoto Category: core Target version: 3.0 =begin = Example Print first 100 primes which are in form of n^2+1 require 'prime' INFINITY = 1.0 / 0 p (1..INFINITY).lazy.map{|n| n**2+1}.select{|m| m.prime?}.take(100) (Example taken from enumerable_lz; thanks @antimon2) = Description Enumerable#lazy returns an instance of Enumerable::Lazy. This is the only method added to the existing bulit-in classes. Lazy is a subclass of Enumerator, which includes Enumerable. So you can call any methods of Enumerable on Lazy, except methods like map, select, etc. are redefined as 'lazy' versions. = Sample implementation ((<URL:https://gist.github.com/1028609>)) (also attached to this ticket) =end -- http://redmine.ruby-lang.org