如何创建一个无限的时代枚举? [英] How to create an infinite enumerable of Times?

查看:72
本文介绍了如何创建一个无限的时代枚举?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望能够有一个对象将Ruby中的Enumerable扩展为星期一的无限列表(例如).

I want to be able to have an object extend Enumerable in Ruby to be an infinite list of Mondays (for example).

因此它将产生:3月29日,4月5日,4月12日......等等

So it would yield: March 29, April 5, April 12...... etc

如何在Ruby中实现呢?

How can I implement this in Ruby?

推荐答案

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

In 1.9 (and probably previous versions using backports), you can easily create enumerator:

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)>]

这篇关于如何创建一个无限的时代枚举?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆