是否有内置方式或更优雅的方法将数字 num 限制为Ruby或Rails中的上限/下限?
e.g。类似的东西:
def number_bounded (num, lower_bound, upper_bound)
return lower_bound if num < lower_bound
return upper_bound if num > upper_bound
num
end
答案 0 :(得分:13)
这是一个聪明的方法:
[lower_bound, num, upper_bound].sort[1]
但那不是很可读。如果你只需要做一次,我就会做
num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)
或者如果您需要多次,请对可比模块进行修补:
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
来实现此目的。
答案 1 :(得分:12)
您可以使用min和max来使代码更简洁:
number_bounded = [lower_bound, [upper_bound, num].min].max
答案 2 :(得分:1)
class Range
def clip(n)
if cover?(n)
n
elsif n < min
min
else
max
end
end
end
答案 3 :(得分:0)
由于你提到了Rails,我将提到如何通过验证来实现这一点。
validates_inclusion_of :the_column, :in => 5..10
当然,这不会自动调整数字。