16

我正在使用Range该类来表示一系列时间。现在我想要一个代表给定时间后任何点的范围。

我试过(DateTime.now .. nil)了,但是Range该类不允许不同类的对象成为同一范围的端点。(尝试Range使用此属性创建 a 会导致ArgumentError: bad value for range。)

时间是否有无穷大的等价物,即Time.now + (1.0/0.0)?或者,有没有办法绕过Range类的要求,即其minmax值属于同一类?

4

3 回答 3

33

可以使用DateTime::Infinity类:

future = DateTime.now..DateTime::Infinity.new
future.include?(1_000_000.years.from_now) #=> true
于 2014-12-22T22:49:33.400 回答
8
range = (Time.now.to_f .. Float::INFINITY)
range.include?(Time.now.to_f) # => true
sleep 1
range.include?(Time.now.to_f) # => true
range.include?(Float::INFINITY) # => true
于 2012-09-24T15:02:09.920 回答
1

当您需要表示无限时间时,您可以使用您自己创建的不同类的对象。只需实现匹配运算符和您使用的任何其他方法,然后它就可以与 Range 对象互换使用。

class TimeRange
    def initialize(min, max)
    ...
    end
end
于 2012-09-24T15:07:53.690 回答