Вот умный способ сделать это:
[lower_bound, num, upper_bound].sort[1]
Но это не очень читабельно. Если вам нужно сделать это только один раз, я бы просто сделал
num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)
или, если вам это нужно несколько раз, обезьяна-патч Comparable модуля:
module Comparable
def bound(range)
return range.first if self < range.first
return range.last if self > range.last
self
end
end
так что вы можете использовать его как
num.bound(lower_bound..upper_bound)
Вы также можете просто потребовать ruby facets , который добавляет метод clip
, который делает именно это.