📝
Ruby 3.3 で入った新機能 Range#overlap?
Ruby 3.3 では新しく Range#overlap? が追加されました。
これはレシーバの範囲と引数の範囲が重なっているかどうかを判定するメソッドです。
p (1..10).overlap?(5..15) # => true
p (1..10).overlap?(15..20) # => false
p (1..10).overlap?(10..15) # => true
# 1...10 の場合は終端を含まないので false になる
p (1...10).overlap?(10..15) # => false
ちなみに (...-Float::INFINITY).overlap?((...-Float::INFINITY)) は true を返します。
p (...-Float::INFINITY).overlap?((...-Float::INFINITY))
# => true
このあたりの挙動に関しては以下の議論を参照。
Discussion