我使用Range
类来表示一系列次数。现在我想要一个代表给定时间后任意点的范围。
我尝试(DateTime.now .. nil)
,但Range
类不允许不同类的对象成为相同范围的端点。 (尝试使用此属性创建Range
会产生ArgumentError: bad value for range
。)
时间是否等于无穷大,即Time.now + (1.0/0.0)
?或者,有没有办法解决Range
类要求其min
和max
值属于同一类的要求?
答案 0 :(得分:21)
可以使用DateTime::Infinity
类:
future = DateTime.now..DateTime::Infinity.new
future.include?(1_000_000.years.from_now) #=> true
答案 1 :(得分:6)
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
答案 2 :(得分:1)
当您需要表示无限时间时,您可以使用自己创建的其他类中的对象。只需实现匹配运算符和您使用的任何其他方法,然后它就可以与Range对象互换使用。
class TimeRange
def initialize(min, max)
...
end
end