如何创造无数可数的时代?

Ale*_*sky 3 ruby enumerable lazy-evaluation

我希望能够在Ruby中将对象扩展为Enumerable,以便成为周一的无限列表(例如).

所以它会产生:3月29日,4月5日,4月12日......等等

我怎样才能在Ruby中实现它?

Mla*_*vić 12

在1.9(可能以前的版本中使用backports)中,您可以轻松创建枚举器:

require 'date'

def ndays_from(from, step=7)
  Enumerator.new {|y|
    loop {
      y.yield from
      from += step
    }
  }
end

e = ndays_from(Date.today)
p e.take(5)
#=> [#<Date: 2010-03-25 (4910561/2,0,2299161)>, #<Date: 2010-04-01 (4910575/2,0,2299161)>, #<Date: 2010-04-08 (4910589/2,0,2299161)>, #<Date: 2010-04-15 (4910603/2,0,2299161)>, #<Date: 2010-04-22 (4910617/2,0,2299161)>]
Run Code Online (Sandbox Code Playgroud)