在ruby中,在给定范围内拟合整数的最简洁方法是什么?如果调用的整数超出范围,则返回给定范围的最小值或最大值的方法。
原生红宝石中是否存在这样的方法?
120.fit(1..100) # => 100
-20.fit(1..100) # => 1
或者也许有一个漂亮的衬垫也能做到这一点?
修改
为了达到这个目的,我现在必须做一些事情:
some_integer = some_range.min if some_integer <= some_range.min
some_integer = some_range.max if some_integer >= some_range.max
答案 0 :(得分:3)
这样的东西?
class Fixnum
def fit(range)
self > range.max ? range.max : (self < range.min ? range.min : self)
end
end
用法:
> 5.fit(1..4) #=> 4
> 0.fit(1..4) #=> 1
> 3.fit(1..4) #=> 3
答案 1 :(得分:2)
不自信最干净,但这是一种方式
(1..100).minmax.push( -50 ).sort[1]
# => 1
(1..100).minmax.push( 120 ).sort[1]
# => 100
答案 2 :(得分:0)
r = (1..100)
v = -12
r.include?(v) ? v : ( r.begin > v ? r.begin : r.last)