instance method Range#overlap?

overlap?(range) -> bool[permalink][rdoc][edit]

self と range に重なりがある場合は true を、そうでない場合は false を返します。

[PARAM] range:
self と重なりがあるかどうかを調べたい Range オブジェクトを指定します。
[EXCEPTION] TypeError:
引数に Range でないオブジェクトを指定した場合に発生します。


(0..2).overlap?(1..3)  #=> true
(0..2).overlap?(3..4)  #=> false
(0..).overlap?(..0)    #=> true
(0..).overlap?(...0)   #=> false

self の端点と range の端点が比較可能でない(<=> メソッドが nil を返す)場合、false を返します。

比較可能でない例

(1..3).overlap?('a'..'d') #=> false

self または range が空である場合、false を返します。

ここで、Range が空であるとは、

  • 始端が終端より大きい
  • Range#exclude_end? が true であり、始端と終端が等しい

のいずれかを満たすことをいいます。

Range が空である例

(0..2).overlap?(1...1) #=> false
(1...1).overlap?(0..2) #=> false
(0..2).overlap?(2..0)  #=> false

なお、上記の意味において空であることと、その Range オブジェクトが表す範囲に含まれるオブジェクトが存在しないこととは、同値ではないことに注意してください。

例えば、Float クラスにおいては -Float::INFINITY が最小値であり、-Float::INFINITY より小さい値は存在しません。従って、...-Float::INFINITY という Range オブジェクトが表す範囲に含まれるオブジェクトは存在しません。

しかしながら、overlap? メソッドでは、...-Float::INFINITY は上記の「空である」条件を満たさないため、「空ではない」とみなされます。そのため、...-Float::INFINITY は ...-Float::INFINITY 自身と重なりがあると判定されます。



(...-Float::INFINITY).overlap?(...-Float::INFINITY) #=> true