📝

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

このあたりの挙動に関しては以下の議論を参照。

GitHubで編集を提案

Discussion