Ruby 4.1 リファレンスマニュアル

instance method Range#clamp

clamp(min, max) -> RangeRuby 4.1 から[permalink][rdoc][edit]
clamp(range) -> Range

self の始端・終端を min と max の範囲に、または range の始端・終端の範囲に収まるように丸めた、新しい Range オブジェクトを返します。

[PARAM] min:
丸める範囲の下限を指定します。
[PARAM] max:
丸める範囲の上限を指定します。
[PARAM] range:
丸める範囲を Range オブジェクトで指定します。
[EXCEPTION] TypeError:
range に Range でないオブジェクトを指定した場合に発生します。
[EXCEPTION] ArgumentError:
min が max より大きい場合に発生します。

返される Range オブジェクトは、次のいずれかを満たす場合に終端を含みません。

  • 返される終端の値が、self または range の終端を含まない値である場合。
  • self の始端・終端の両方が下限に丸められた場合、または両方が上限に丸められた 場合。この場合 self は丸める範囲の外側に完全に外れているため、終端を除くことで 空の範囲として表現されます。

それ以外の場合、返される Range オブジェクトは終端を含みます。

例
p (1..10).clamp(3, 7)   # => 3..7
p (1...10).clamp(3, 7)  # => 3..7
p (1...10).clamp(3, 10) # => 3...10
p (0...).clamp(0, 10)   # => 0..10

p (1..10).clamp(3..7)  # => 3..7
p (1..10).clamp(3...7) # => 3...7
p (1..5).clamp(3...7)  # => 3..5

p (..10).clamp(3, 7)   # => 3..7
p (...10).clamp(3, 7)  # => 3..7
p (..10).clamp(3...7)  # => 3...7
p (..5).clamp(3...7)   # => 3..5

p (1..10).clamp(20..30) # => 20...20
p (1..10).clamp(-10..0) # => 0...0
p (..10).clamp(20..30)  # => 20...20

p (1..10).clamp(..7)  # => 1..7
p (1..10).clamp(...7) # => 1...7
p (1..5).clamp(...7)  # => 1..5

p (1..10).clamp(3..)  # => 3..10
p (1..10).clamp(3...) # => 3..10
p (1..).clamp(3..)    # => 3..
p (1...).clamp(3...)  # => 3...

[SEE_ALSO] Comparable#clamp

[SEE_ALSO] Range#cover?