我使用Range类来表示一个时间范围,现在我需要一个表示给定时间后任意点的范围。我尝试了(DateTime.now .. nil),但是Range类不允许不同类的对象作为同一范围的端点(尝试使用此属性创建Range会导致ArgumentError: bad value for range)。是否存在时间无穷大的等价物,即Time.now + (1.0/0.0)?或者,是否有办法绕过Range类要求其min和max值属于同一类的要求?
Range
(DateTime.now .. nil)
ArgumentError: bad value for range
Time.now + (1.0/0.0)
min
max
shstlldc1#
可以使用DateTime::Infinity类:
DateTime::Infinity
future = DateTime.now..DateTime::Infinity.new future.include?(1_000_000.years.from_now) #=> true
vmpqdwk32#
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
8zzbczxx3#
当你需要表示无限时间时,你可以使用一个来自不同类的对象,你自己创建的对象。只要实现匹配操作符和你使用的任何其他方法,然后它就可以与Range对象互换使用。
class TimeRange def initialize(min, max) ... end end
3条答案
按热度按时间shstlldc1#
可以使用
DateTime::Infinity
类:vmpqdwk32#
8zzbczxx3#
当你需要表示无限时间时,你可以使用一个来自不同类的对象,你自己创建的对象。只要实现匹配操作符和你使用的任何其他方法,然后它就可以与Range对象互换使用。