infinite list of Mondays (for example).
So it would yield: March 29, April 5, April 12...... etc
How can I implement this in Ruby?
First learn to implement Enumerable, then it should be obvious. All you need
to do is define a #each method. So, for example, here's an implementation of
all numbers:
class PositiveIntegers
include Enumerable
def each
i = 1
while true
yield i
i += 1
end
end
end
If you can figure out how to do a similar loop for Mondays, you can do that.
Keep in mind that this kind of thing isn't nearly as cool in practice as you
might like -- for one, a lot of the reasons you'd want an enumerable are not
going to work well. For example, calling .map{...}.each is probably going to
result in an infinite loop, as map returns an array.
I would probably do it like this:
module Foo
def self.positive_integers
return enum_for
positive_integers) unless block_given?
i = 1
while true
yield i
i += 1
end
end
end
So that means you could do this:
Foo.positive_integers { ... }
Or, that enum_for means you could also do this:
Foo.positive_integers.each { ... }