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

instance method Comparable#clamp

clamp(min, max) -> objectRuby 2.4.0 から[permalink][rdoc][edit]
clamp(range) -> object

self を範囲内に収めます。

min と max の2つの引数が渡された場合は次のようになります。 self <=> min が負数を返したときは min を、 self <=> max が正数を返したときは max を、それ以外の場合は self を返します。

min が nil の場合、min は self よりも小さい値として扱われます。 max が nil の場合、max は self よりも大きい値として扱われます。

range が1つ渡された場合は次のようになります。 self <=> range.begin が負数を返したときは range.begin を、 self <=> range.end が正数を返したときは range.end を、それ以外の場合は self を返します。

range.begin が nil の場合、range.begin は self よりも小さい値として扱われます。 range.end が nil の場合、range.end は self よりも大きい値として扱われます。

[PARAM] min:
範囲の下端を表すオブジェクトを指定します。
[PARAM] max:
範囲の上端を表すオブジェクトを指定します。
[PARAM] range:
範囲を表す Range オブジェクトを指定します。
[EXCEPTION] ArgumentError:
rangeが終端を含まない範囲オブジェクトであり、終端が nil でないときに発生します。
p 12.clamp(0, 100)       #=> 12
p 523.clamp(0, 100)      #=> 100
p -3.123.clamp(0, 100)   #=> 0

p 'd'.clamp('a', 'f')    #=> 'd'
p 'z'.clamp('a', 'f')    #=> 'f'
nil を渡す例
p 5.clamp(0, nil)        #=> 5
p 5.clamp(nil, 0)        #=> 0
p 5.clamp(nil, nil)      #=> 5
range を渡す例
p 12.clamp(0..100)   #=> 12
p 523.clamp(0..100)  #=> 100
p -3.123.clamp(0..100) #=> 0

p 'd'.clamp('a'..'f')  #=> 'd'
p 'z'.clamp('a'..'f')  #=> 'f'

100.clamp(0...100)   # ArgumentError
range の始端か終端が nil の場合
p -20.clamp(0..) #=> 0
p 523.clamp(..100) #=> 100