16

私はRange時間の範囲を表すためにクラスを使用しています。ここで、特定の時間の後の任意のポイントを表す範囲が必要です。

試し(DateTime.now .. nil)ましたが、このRangeクラスでは、異なるクラスのオブジェクトを同じ範囲のエンドポイントにすることはできません。Range(このプロパティを使用してを作成しようとすると、結果が得られ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 に答える